关于学习stm32时遇到的几个问题,求回答

polar_1995 2018-10-08 06:41:34
1.如果初始化了相应的中断,却没有对应的中断服务函数存在,会出现什么问题?原因何在?
2.为什么以下的初始化的EXTI0_IRQn、EXTI2_IRQn、EXTI3_IRQn、EXTI4_IRQn不能合并在一起写?
...全文
356 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2018-10-15
  • 打赏
  • 举报
回复
这种事情真在以 C51 为核的单片机上干过(不是 stm32),编译器是 keil 4。结果就是,什么特别的逻辑分支都没有发生。当时是需要一个外部中断唤醒。

这种事情取决于编译器。如果编译器在没有 Scan 到中断 server 例程时,不产生跳转语句,就没事。

对于编译器来说,在找不到跳转目标就产生跳转代码,是不可思议的。毕竟 server 例程不是动态生成的。

当然,对于像 M*Core 这样的连跳转目标都是由软件配置(改写动态的向量表)的系统,又另当别论。

如果你仅仅需要中断事件触发某种状态,而又不需要中断服务去真正处理,建议你写一个空的 server 例程。大不了花费几个时钟周期跳进跳出。
chentechh 2018-10-14
  • 打赏
  • 举报
回复
估计没有反应
ahua9999 2018-10-13
  • 打赏
  • 举报
回复
实验下就知道了,通常结果是会死机,假如你中断来了,你弄个空的中断出来程序。
yishumei 2018-10-09
  • 打赏
  • 举报
回复
3楼已经回答了问题1。 问题2.为什么以下的初始化的EXTI0_IRQn、EXTI2_IRQn、EXTI3_IRQn、EXTI4_IRQn不能合并在一起写? 如果楼主熟悉某一款单片机,那么上述中断的初始化都可以写在一起,只是这样做降低了程序的可读性也增加了维护时的难度。多说一点,程序能够实现功能是重要的,但是没有人能记住自己写下的所有代码,所以程序的可读性和易维护性也同样重要。
worldy 2018-10-09
  • 打赏
  • 举报
回复
1.如果初始化了相应的中断,却没有对应的中断服务函数存在,会出现什么问题?原因何在?

中断函数的地址会被编译程序保存到中断单元的地址,该地址如果没有初始化,可能是个随机的数,中断发生的时候,进入中断单元,然后程序就进入未知的状态。。。。
phangbob 2018-10-09
  • 打赏
  • 举报
回复
好问题,前排围观下
polar_1995 2018-10-08
  • 打赏
  • 举报
回复
没有人,自己顶一下

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧