我在子函数中声明了一个静态变量 static int fangwei = 0 当我把cpu复位后加载程序 这个变量无法赋值 当我把程序随意改个别的地方然后编译直接reload后就正常了 这是哪的问题
ying jiang:
别的子函数中的静态变量都正常的
Thomas Yang1:
静态局部变量被编译器放在全局存储区.data(注意:不在.bss段内),所以它虽然是局部的,但是在程序的整个生命周期中存在。静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。这个比较好理解,每次函数调用静态局部变量的时候都修改它然后离开,下次读的时候从全局存储区读出的静态局部变量就是上次修改后的值。如果用户在程序中初始化该变量的,那么每次重新加载后(不编译),因为.data会覆盖老的.data区域,应该这个变量会更新为初始值的,所以您描述的现象比较奇怪,能否把源代码,.data段信息,map文件等相关信息发上来,我们帮您一起看看。