完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
临时函数1(){uint8_t a;........}
中断函数1(){uint8_t b;临时函数1()........} 临时函数2(){uint8_t c;........}中断函数2(){uint8_t d;临时函数2()} 问题来了:keil C51 在存储这些临时变量的时候使用外部XDATA存储,a,b,c,d 这四个临时变量有可能使用同一个XDATA地址么,如果可能,这样不就会有风险产生么?a,c 之间明显没有调用关系,那么假设a,c使用了相同的Xdata区域,先后进入中断1,2 ,那不是会导致明显的错误么? 或者说keil怎么处理中断中的临时变量? |
|
相关推荐
5个回答
|
|
临时变量出了函数就释放 所以就没意义了
|
|
|
|
在中断1执行时,被中断2 (优先级更高)打断,改变同样地址的内容
|
|
|
|
中断局部变量:
1.中断函数中的变量和其它函数是一样的可以使用全局变量,也可以使用局部变量。如果是局部变量,在不同中断中变量重名时是不会有影响的。 2.C51中局部变量是地址固定的,并且不互相调用的函数的局部变量地址可能是一样的。 3.中断函数的局部变量(少量)一般被分配在寄存器中,而被用到的寄存器会被压栈保护。原来的函数不会被影响。 4.C51编译程序检查所有的局部变量和所有函数的调用树,把它认为不会冲突的局部变量共用一个RAM地址,局部变量重名不会冲突,不论中断函数 还是一般函数。 5.中断中定义静态局部变量可以受到保护 其他的期待回答 |
|
|
|
找些堆栈的知识看看吧
|
|
|
|
只有小组成员才能发言,加入小组>>
3326 浏览 9 评论
3006 浏览 16 评论
3503 浏览 1 评论
9079 浏览 16 评论
4096 浏览 18 评论
1208浏览 3评论
618浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
607浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2345浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1905浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-1 23:25 , Processed in 1.648947 second(s), Total 100, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号