首页 > 编程知识 正文

超智能足球疾电技能,中断向量表的作用

时间:2023-05-04 21:55:46 阅读:136972 作者:272

来源:公众号【鱼鹰谈单片机】

作者:鱼鹰Osprey

ID :emOsprey

如果有boot,则需要重新设置app的中断向量表,使中断向量表从boot切换到app部分。 大多数工程师按如下方式设置中断向量表的地址0x0800 9000。

nvic _ setvectortable (nvic _ vect tab _ flash,0x9000 ); 这句话本身不是问题。 问题是那不方便,不聪明!

单片机工程师不仅仅要完成基本功能,还要能让你的代码更好维护!

要成功设置中断向量表,需要完成以下两个步骤:

1、在MDK中设定FLASH起始地址(实际上是最终修改的sct文件的内容);

2、在代码中设定中断向量表的位置(上面的相似代码)。

第一次安装的时候,我们很容易就能正确安装,很难忘记。 但是,twdmn有一天需求发生了变化,不想从0x9000地址开始设定,想从0x8000开始。 那么,很可能只记得第一个修改,而忘记了第二个修改。

鱼鹰忘记过很多次,在这里多次踩了洞,浪费了很多时间,所以想和朋友分享鱼鹰现在的设置方法。

既然我会忘记第二个,我可以合并这两个操作,让代码根据第一个操作自动完成中断向量表的设置吗?

当然,这里需要使用MDK的特殊变量进行设置。

MDK中内置的特殊变量有很多。 以前也介绍了几个鱼鹰,今天继续介绍特殊变量:

extern int Image$$ER_IROM1$$Base; 此变量表示ER_IROM1的开始地址,即MDK中的开始地址。

这是我们的第一步。 因此,可以从此变量获取设置的FLASH开始地址,并完成中断向量表的自动设置。

extern int Image$$ER_IROM1$$Base; nvic _ setvectortable (nvic _ vect tab _ flash,(uint32_t ) image $ $ er _ irom1$ $ base-flash _ base ); FLASH_BASE宏通常位于芯片头文件(如stm32f10x.h )中。

另一方面,Image$$ER_IROM1$$Base是编译器自动生成的内置变量,有变量的地址是FLASH的开始地址,变量值本身没有意义。 这个地址可以通过强制转换获得。

从map文件中可以看出,此变量本身不占用内存空间(Size为0 ),只有此变量的地址很有用。 因此,必须先获得地址,然后强制转换。

此外,此特殊变量必须事先声明。 否则请勿使用。

这样,在代码中,通过设置FLASH的起始地址,可以智能地设置中断向量表。

我只要修改这里就行了。 (实际上,最好设置Size大小,以帮助MDK确定FLASH是否不够。 )

另外,如果中断向量表设置在RAM中,也可以考虑进行这样智能的设定哦。 这个由各位道友发挥。

本篇的小笔记受到你的启发,请转发分享哦!

请阅读:

嵌入式系统优先级详细信息

Eil调试经验总结

如何计算线程CPU使用率?

很久以来,你都会感谢自己写的异常处理代码

终极串行接收方式,终极效率

延迟功能进化论(合集) )

如何编写稳健高效的串口接收程序?

多年的单片机调试断点到底应该如何设置? |瞄准认知

-THE END-

如果对你有帮助的话,记得转发共享哦

微信公众号“鱼鹰谈单片机”

每周一单片机知识

长按后,关注图中的公众号

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。