完善资料让更多小伙伴认识你,还能领取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 的开关中断方式就是简单粗暴,因为一般我们临界段的处理时间是比较短的,关了再开其实并没有太大的影响。 |
|
|
|
只有小组成员才能发言,加入小组>>
157个成员聚集在这个小组
加入小组【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
906 浏览 0 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
1313 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
939 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
1205 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board使用7寸屏设置为RGB666大端模式模式成功显示摄像头图案
1216 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 15:59 , Processed in 0.705202 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号