完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用的是51,型号是80c32,外挂的rom和ram和can总线。
我在main函数里执行了一下某段初始化函数,在定时器中断里也执行了该段函数,如下: init()//初始化函数 { ................ addr = addr_reg1; *addr = 0x06; ................ } timer1_isr() interrupt3 using2 { init();//中断里运行 } main() { init();//首次运行 while(1) { ......... } } 硬件跑,出错,发现我指定的给某地址赋值06,结果是另一个变量变成了06了。 然后我用keil,软件仿了一下,也同样出错。 我用反汇编,单步调试,后来追查到,另一个被错赋值的变量,是在中断里被赋值的。 单片机有4组r0-r7,发现编译器在主程序中用的是第0组r0-r7(using0),在进入定时器中断时,确实是用我指定的第2组 (using0)。 但赋值出错的那几条语句,它读取的是固定的0x06地址的值(即第0组的r6),而不是用我指定的第2组的寄存器,使得指向地 址出错,导致0x06被赋值到其他地址上去了。 具体的错误语句是 MOV R4,0x06,0x06是第0组寄存器的R6地址;如果是生成 MOV R4,R6就不会有错,采用的是第2组 (using2)的寄存器。 我把定时器中断指定的using2字眼去掉,发现编译器自动分配了采用第0组寄存器去处理中断,这样就没出错了。但是,给定 时器指定using1,using2,using3都出错。都生成了MOV R4,0x06这一句汇编。 请教高手,何解? |
|
相关推荐
3个回答
|
|
现在还用80C32啊?好像被灭绝了吧!
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备组织架构
536 浏览 0 评论
531 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备树组成和结构
794 浏览 0 评论
【敏矽微ME32G070开发板免费体验】点亮WS2812B灯板
922 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核启动流程
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12157 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 14:34 , Processed in 0.593421 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号