bss段:Block Started by Symbol的简称,BSS段属于静态内存区,是指用来存放程序中未初始化的全局变量的一块内存区域。
遇到问题,问题未初始化全局变量和static变量不清0,eg:
+ static int is_irq_inited = 0;
+ if(is_irq_inited != 1) {
+ init_irq();
+ is_irq_inited = 1;
+ }
执行reboot后发现is_irq_inited = 1一直为1;
原因bss段没有初始化为0。
修改:
+ __bss_start = .;
.bss :
{
*(.bss)
}
. = ALIGN(4);
+ __bss_end = .;
+ /* clear .bss section */
+ ldr r0, =__bss_start
+ ldr r1, =__bss_end
+ mov r2, #0
+1:
+ stmia r0!, {r2}
+ cmp r1, r0
+ bgt 1b