[应用相关] 能否这样使用

[复制链接]
865|12
 楼主| huangchui 发表于 2016-9-26 22:41 | 显示全部楼层 |阅读模式
在版内搜索了一下关于“stm全局中断问题”,得到的答案是利用固件库中函数NVIC_SETPRIMASK()和NVIC_RESETPRIMASK()来开关全局中断,于是继续寻找这两个函数,发现在两个函数在使stm32f10x_nvic.c中,但是我V3.0的库中只找到了有关的misc.c,但misc.c仍然没有“NVIC_SETPRIMASK()和NVIC_RESETPRIMASK()”这两个函数,于是继续寻找,发现一个帖子中,香版主说,这两个功能已经合并到core_cm3.c和core_cm3.h,于是看了一下,对应的宏定义__enable_irq()和__disable_irq(),但是这两文件在定义在ICC_AMR(IAR编译环境)下,如果我使用另外一个函数__set_PRIMASK(1) :是不是关全局中断,__set_PRIMASK(0)是不是开全局中断,能否这样使用,请大家帮忙看一下!谢谢!!
dengdc 发表于 2016-9-26 22:50 | 显示全部楼层
然后呢?你是怎么应对这个的呢
 楼主| huangchui 发表于 2016-9-26 22:50 | 显示全部楼层

__set_PRIMASK(1),
__set_PRIMASK(0);
这样使用可否
heweibig 发表于 2016-9-26 22:50 | 显示全部楼层
在STM32上,强烈不建议关闭全局中断。
wuhany 发表于 2016-9-26 22:50 | 显示全部楼层

难道上电初始化也不用关吗?
 楼主| huangchui 发表于 2016-9-26 22:51 | 显示全部楼层
我只是在初始化开始时,关闭全局中断(__set_PRIMASK(1),
), 初始化结束后,开全局中断(__set_PRIMASK(0);
),这样操作是否可以?
jiahy 发表于 2016-9-26 22:56 | 显示全部楼层
上电初始化的时候,默认就是关中断,不必再多此一举。
lizye 发表于 2016-9-26 22:59 | 显示全部楼层
这两个可以的:
__disable_irq();
__enable_irq();
static __INLINE void __enable_fault_irq()         { __ASM ("cpsie f"); }
static __INLINE void __disable_fault_irq()        { __ASM ("cpsid f"); }
是在core_cm3.h里面声明的   必须要引用这个头文件的
shimx 发表于 2016-9-26 23:04 | 显示全部楼层
固件中的函数都有哪些啊?
jiaxw 发表于 2016-9-26 23:05 | 显示全部楼层
进中断的时候一定要关中断
spark周 发表于 2016-9-26 23:05 | 显示全部楼层
个人觉得没有必要。ARM的内核和本身的8位机还是有所区别的。
 楼主| huangchui 发表于 2016-9-26 23:05 | 显示全部楼层
嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈
wahahaheihei 发表于 2016-9-27 08:19 | 显示全部楼层
看看技术手册是说的哪个寄存器操作的这个功能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

918

主题

12323

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部