| 
 
新手上路 
 
	积分24金钱24 注册时间2020-4-27在线时间6 小时 | 
 
1金钱 
| 我按照视频里面的方法,在start.s中加了对bss段的清除,当然也对imx6u.lds链接文件相关进行了修改,烧录到开发板,发现灯不闪 
 我把bss清除段删除,灯就会闪烁。
 
 我的start.s 是这样写的:
 
 .global _start                  /* 全局标号 */
 .global _bss_start /*定义了一个32位的word全局标号_bss_start并以__bss_start的值初始化 */
 _bss_start:
 .word __bss_start
 
 .global _bss_end/*定义了一个32位的word全局标号_bss_end并以__bss_end的值初始化 */
 _bss_end:
 .word __bss_end
 
 /*
 * 描述:        _start函数,程序从此函数开始执行,此函数主要功能是设置C
 *                 运行环境。
 */
 _start:
 
 /* 进入SVC模式 */
 mrs r0, cpsr
 bic r0, r0, #0x1f         /* 将r0寄存器中的低5位清零,也就是cpsr的M0~M4         */
 orr r0, r0, #0x13         /* r0或上0x13,表示使用SVC模式                                        */
 msr cpsr, r0                /* 将r0 的数据写入到cpsr_c中                                         */
 
 /*清除bss段 */
 ldr r0, _bss_start   /*将_bss_start的值赋值给r0 */
 ldr r1, _bss_end     /*将_bss_end的值赋值给r1 */
 mov r2, #0          /*将r2设为0 */
 bss_loop:
 stmia r0!, {r2}      /*先将r2寄存器的值(0)赋值给r0数值所对应的地址,然后r0自动加1 */
 cmp r0, r1    /*比较r0和r1的值 */
 ble bss_loop  /*如果r0地址小于等于r1,则继续清除bss段 */
 
 ldr sp, =0x80200000        /* 设置栈指针                         */
 b main                                /* 跳转到main函数                  */
 
 
 
 imx6u.lds是这样写的:
 
 SECTIONS {
 . = 0x87800000;
 .text : {
 start.o
 main.o
 *(.text)
 }
 
 .rodata ALIGN(4) : {*(.rodata)}
 .data ALIGN(4) : {*(.data)}
 __bss_start=.;
 .bss ALIGN(4) : {*(.bss) *(COMMON)}
 __bss_end=.;
 }
 
 
 求大神指教哪里出了问题,谢谢!
 
 
 | 
 |