完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在一个项目中采用了 cortex m4 的内核,用于 pwm 控制电机,对定时器的实时性要求比较高,希望 rt-thread 在进行原子操作时不关闭 pwm 的定时器。
当前 rt-thread 的原子操作时开关总中断(如下代码),开关总中断影响 pwm 定时器中断响应 rt_hw_interrupt_disable PROC EXPORT rt_hw_interrupt_disable MRS r0, PRIMASK CPSID I BX LR ENDP ;/* ; * void rt_hw_interrupt_enable(rt_base_t level); ; */ rt_hw_interrupt_enable PROC EXPORT rt_hw_interrupt_enable MSR PRIMASK, r0 BX LR ENDP 在 freertos 中除开关总中断外,还有一个可关闭低于指定优先级的中断。这样可以保障指定优先级的性能,其实现如下,当然代价是指定优先级的中断不能调用 rtos 相关的接口。 portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void ) { uint32_t ulOriginalBASEPRI, ulNewBASEPRI; __asm volatile ( " mrs %0, basepri \n" \ " mov %1, %2 \n" \ " msr basepri, %1 \n" \ " isb \n" \ " dsb \n" \ :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory" ); /* This return will not be reached but is necessary to prevent compiler warnings. */ return ulOriginalBASEPRI; } /*-----------------------------------------------------------*/ portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue ) { __asm volatile ( " msr basepri, %0 " :: "r" ( ulNewMaskValue ) : "memory" ); } 问题 rt-thread 如何实现与 freertos 相同的功能(只关闭低于指定优先级的中断),除了修改rt_hw_interrupt_disable、rt_hw_interrupt_enable,还有什么要注意的吗? |
|
相关推荐
1个回答
|
|
1、可以参考FreeRTOS的开关中断方式,通过向basepri寄存器写入要屏蔽的中断号数值(大于这个数值的将会被屏蔽)
2、RTT 的开关中断方式就是简单粗暴,因为一般我们临界段的处理时间是比较短的,关了再开其实并没有太大的影响。 |
|
|
|
只有小组成员才能发言,加入小组>>
152个成员聚集在这个小组
加入小组【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
864 浏览 0 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
1195 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
848 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
1151 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board使用7寸屏设置为RGB666大端模式模式成功显示摄像头图案
1140 浏览 0 评论
在RT-Thread Studio中新建的stm32f407-atk-explorer工程运行qemu失败,是什么原因引起的?
205浏览 3评论
STM32F407ZGT6 spi flash片选引脚无法被拉低的原因?怎么解决?
1185浏览 2评论
移植RT-THREAD在stm32开发板上,使用rt_kprintf不能正常打印的原因是什么?怎么解决?
510浏览 2评论
stm32f103zet用rtthread studio生成带finsh的项目程序,串口输入help没有反应是为什么?
512浏览 2评论
rtthread studio已经成功编写了外部flash下载算法,程序也能下载进去但是不能进行调试怎么办?
431浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 03:15 , Processed in 0.695513 second(s), Total 84, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号