[PIC®/AVR®/dsPIC®产品]

各位大神,BOOTLOADER程序中不能用中断吗?

[复制链接]
4437|11
手机看帖
扫描二维码
随时随地手机跟帖
klz198327|  楼主 | 2021-9-9 08:54 | 显示全部楼层 |阅读模式
由于协议里面用到好几个定时,使用定时器中断后发现和应用程序中断有冲突,各位大神BOOTLOADER不能用中断的吗?如果能用的话,需要怎么改进呢~~

使用特权

评论回复
mcu5i51| | 2021-9-9 09:33 | 显示全部楼层
要看芯片呀,多数是可以的,内部会重新映射

使用特权

评论回复
南来之风| | 2021-9-9 09:36 | 显示全部楼层
建议快速看一下:
使用MCC的16位Bootloader:

https://mu.microchip.com/16-bit-bootloaders-using-mcc-device-side-btl2-sc
本课程将重点介绍如何使用MPLAB® X IDE和MPLAB代码配置器(MCC)为PIC24/dsPIC33器件生成16位bootloader程序,并将其合并到应用程序中。本课程将涵盖bootloader程序的基础知识,16位bootloader程序内存映射,中断重定向,验证方法,bootloader程序和应用程序之间的切换。本课程还将详细介绍如何使用MCC的bootloader模块创建完整的bootloader程序和应用程序,以及如何将应用程序代码下载到设备中。

使用特权

评论回复
klz198327|  楼主 | 2021-9-9 10:11 | 显示全部楼层
谢谢大家,我用的是18F45k80,boot里面开了中断,然后使用
    asm ("psect  intcode,global,reloc=2,class=CODE,delta=1");
    asm ("GOTO " str(NEW_INTERRUPT_VECTOR_HIGH));
    asm ("psect  intcodelo,global,reloc=2,class=CODE,delta=1");
    asm ("GOTO " str(NEW_INTERRUPT_VECTOR_LOW));
报错误:
:0:: error: (596) segment "intcode" (8-875) overlaps segment "intcodelo" (18-1F)

使用特权

评论回复
lcczg| | 2021-9-9 15:53 | 显示全部楼层
中断入口只有一个,小心区分一下bootloader和application,你的代码如何区分的呐?否则会进入同一个中断里面,就乱了。

使用特权

评论回复
m564522634| | 2021-9-9 16:19 | 显示全部楼层
klz198327 发表于 2021-9-9 10:11
谢谢大家,我用的是18F45k80,boot里面开了中断,然后使用
    asm ("psect  intcode,global,reloc=2,class ...

感觉你这是中断映射的问题呀,关键你描述有问题呀,中断哪里都可以用, 你这个估计是中断向量表映射的问题,你去查看下相关的手册

使用特权

评论回复
e21| | 2021-9-9 16:41 | 显示全部楼层
进入主程序前,关中断清标志,主程序调好中断向量, 清除好标志,才能开中断. 否则主程序还没跑起来就进中断, 向量不对就飞了.

使用特权

评论回复
ayb_ice| | 2021-9-9 16:48 | 显示全部楼层
当然可以用了,理论上BOOT可以使用所有的外设资源,
APP初始化需要考虑被BOOT使用的外设的寄存器值被改变了,初始化的时候要完整的初始化
另外如果没有重新映射功能,需要软件处理中断源,是BOOT中断还是APP中断,一般通过位变量判断就可以实现,这个位变量必须是BOOT与APP共享的

使用特权

评论回复
wooda| | 2021-9-10 12:27 | 显示全部楼层
这么说吧,需要的时候,bootloader也可以是一个完整的功能系统,完成一些复杂的工作。限制仅仅是bl的代码体积。
你想要的话,bl可以完成各种压缩算法啊,格式化算法啊什么的

使用特权

评论回复
wandersky| | 2021-9-10 13:11 | 显示全部楼层
我的下意识是bootloader不要用中断, uboot有中断吗,应该全是查询方式实现吧?

使用特权

评论回复
zhangyaoming| | 2021-9-15 23:08 | 显示全部楼层
klz198327 发表于 2021-9-9 10:11
谢谢大家,我用的是18F45k80,boot里面开了中断,然后使用
    asm ("psect  intcode,global,reloc=2,class ...

你好,你的bootloader能用了吗?我使用这个跳转,总是错误

使用特权

评论回复
cxque| | 2022-6-16 15:03 | 显示全部楼层
klz198327 发表于 2021-9-9 10:11
谢谢大家,我用的是18F45k80,boot里面开了中断,然后使用
    asm ("psect  intcode,global,reloc=2,class ...

hello,问题解决了吗?app使用了中断就会复位,有遇到这样的问题吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

20

帖子

1

粉丝