新手上路
- 积分
- 23
- 金钱
- 23
- 注册时间
- 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=.;
}
求大神指教哪里出了问题,谢谢!
|
|