[已解决] FREERTOS怎么使用定时器中断??开始任务就进入临界状态了 [复制链接] 呵呵1991 该用户从未签到 5 主题 21 帖子 0 蝴蝶豆 中级会员 最后登录 2020-11-21 发消息 电梯直达 楼主 发表于 2019-8-12 11:59:10 | 只看该作者 因为开始任务就进入临界状态了,所以,怎么才能实现定时器中断呢??? 收藏 评分 淘帖 支持 反对 欢迎加入STM32L系列开发群:571793578 点评 回复 举报 tanic 该用户从未签到 44 主题 633 帖子 163 蝴蝶豆 金牌会员 最后登录 2020-12-9 发消息 沙发 发表于 2019-8-14 10:43:58 | 只看该作者 直接用就好,中断里面不调用os的API的话没啥要特别注意的,要用os的API的话用对应的API有FromISR后缀 评分 参与人数 1蝴蝶豆 +2收起理由 STMCU+ 2 查看全部评分 点评 回复 支持 反对 评分 举报 哀歌与世无争 该用户从未签到 3 主题 77 帖子 20 蝴蝶豆 高级会员 最后登录 2020-12-2 发消息 板凳 发表于 2019-8-15 09:24:46 | 只看该作者 FreeRTOS中断优先级分成两组:一组受 FreeRTOS管理,在临界区里会被屏蔽,另一组不受RTOS影响,永远都是使能的。configMAX_SYSCALL_INTERRUPT_PRIORITY在FreeRTOSConfig.h中配置,定义两组中断优先级的边界。逻辑优先级高于此值的中断不受RTOS影响。例如定义: #define configPRIO_BITS 4 #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 //中断最低优先级#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 //系统可管理的最高中断优先级#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) 复制代码 那么优先级0-4的中断不会被FreeRTOS打断,因为进入临界区也只屏蔽可管理的中断5-15。 所以只要把定时器的优先级设置成高于MAX_SYSCALL_INTERRUPT_PRIORITY就行了,即使开始任务进入临界也能触发。 评分 参与人数 1蝴蝶豆 +2收起理由 STMCU+ 2 查看全部评分