-
XC8编译器调用函数后局域变量值被改变
[color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]最近发现个问题,有个函数里边调用别的函数后老出错,查找程序没有问题,经过仿真后发现在调用一个子函数后有几个局部变量值会发生改变,再分析原因,发现本函数的局部变量和子函数的局部变量有地址重合的,子函数中对局部变量进行了操作,返回后相应的局部变量值发生了改变,所以出错,我现在把函数的所有局部变量全部设置为了静态变量,但是这只能是个权益之计,而且这样解决不知道会不会造成别的问题,正常来说C编译器应该能够避免这种现象的发生,我怀疑是编译器设置有问题了,但是找不到地方,有哪位大神能给帮帮忙呗。[/size][/font][/backcolor][/color]
13914浏览量 33回复量 关注量 -
PIC18的bootloader引导APP正常,但可能跑飞? sos
硬件: 单片机:PIC18F25K80 情况: 1. bootloader单独跑没有问题;APP单独跑也没问题。 2. 将bootloader的hex文件,loadables到app工程,并将app的cod offset为0x0C00,成功进入app模式。 问题: 由bootloader引导app模式,存在程序跑飞的情况(中断已不响应)。有时候能正常运行半小时,有时仅能正常运行几十秒。 bootloader部分代码: unsigned char isBootloader __at(0x00AA); // Bootloader中的中断 void interrupt low_priority InterruptISR_Low(void) { if(0 == isBootloader) { asm ("pagesel " str (APP_LOW_VECTOR)); asm ("goto " str (APP_LOW_VECTOR)); } else lowPriorityISR(); } void main() { ...初始化 if(0 == isBootloader) { STKPTR = 0x00; // 清除 返回堆栈指针 BSR = 0x00; asm ("pagesel " str(APP_RESET_VECTOR)); asm ("goto " str(APP_RESET_VECTOR)); } ... }
2330浏览量 0回复量 关注量