你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一个ISR宏,代替startup_xxx.s和xxx_it.c文件

[复制链接]
yangc9 发布时间:2018-6-1 15:34
本帖最后由 yangc9 于 2018-6-1 16:01 编辑

定义:
#define ISR(irqn) void ISR_##irqn();\
__root void(* const pISR_##irqn)() @ 0x8000000 + (irqn+16) * 4 = ISR_##irqn;\
void ISR_##irqn()

使用:
ISR(TIM2_IRQn)
{
//处理你的中断
}

在IAR环境有效.别的环境不知道.

##表示名字拼接.

ISR(TIM2_IRQn)展开成:
void ISR_TIM2_IRQn();
__root void(* const pISR_TIM2_IRQn)() @ 0x8000000 + (TIM2_IRQn+16) * 4 = ISR_TIM2_IRQn;
void ISR_TIM2_IRQn()

第一行声明了一个函数,名为ISR_TIM2_IRQn.
第二行定义一个函数指针,放在0x8000000 + (TIM2_IRQn+16) * 4这个位置, 指向ISR_TIM2_IRQn.这正是中断向量表的位置.
__root令连接器不可删除此变量,即使发现他没有被别的函数使用.
const令编译器将初值直接放在目标位置,而不是在程序开始时赋值.
第3行与后面的大括号构成函数定义.
收藏 1 评论2 发布时间:2018-6-1 15:34

举报

2个回答
勿忘心安110 回答时间:2018-6-1 15:42:24
楼主 能不能将原理说一下 不是很明白 谢谢
子曰好人 回答时间:2018-6-14 10:33:57
mcu里面的数据就存放在那里,只是访问的方式不一样,汇编文件和_it.c文件帮我们完成了从地址到函数的转换,方便了我们操作和阅读,隐藏了我们不必要知道的底层信息。
楼主这个操作算很“骚”了,哈哈哈,对于理解了底层的攻城狮来说还是很容易明白的,但是对于初学者或者不熟悉底层的人来说就有点看不懂了。给楼主大胆尝试新方式操作mcu点个大赞

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版