历史上的今天
今天是:2024年12月29日(星期日)
2018年12月29日 | STM32 FreeRTOS 外部中断服务函数注意事项
2018-12-29 来源:eefocus
移植正点原子的FreeRTOS操作系统到我们自己的工程,发现的一个注意事项;
看下面代码,带FreeRTOS的外部中断服务函数,实现按键消抖,不能用delay_ms()或者和vTaskDelay(),会导致系统奔溃;
原因是delay_ms()其实就是对 FreeRTOS 中的延时函数 vTaskDelay()的简单封装,所以在使用 delay_ms()的时候就会导致任务切换,即不会导致这个外部中断延时阻塞,而切换到其他任务,导致外部中断出错;
这里我们可以使用delay_xms(),其不会引起任务调度,是真的延时;(仅针对外部中断函数,因为我发现在按键扫描函数里面,可以使用delay_ms();)
//提供框架---对应PA0---》PG0
void EXTI0_IRQHandler(void)
{
// delay_ms(10);//消抖
delay_xms(10); //消抖
if(KEY9==0)
{
SEGGER_RTT_printf(0,"按键IN9输入 \n");
}
EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位
}
号外:
(1)delay_ms()和vTaskDelay()一样使用,delay_ms()其实就是对 FreeRTOS 中的延时函数 vTaskDelay()的简单封装 但vTaskDelay()程序更简洁,ms级延时更精准;
为了编程方便,delay_ms()一般使用在外设模块初始化时候的ms级延时,例如RS485、LCD、以太网模块等,实测没有问题;
(2)注意NVIC_IRQChannelPreemptionPriority优先级配置,正点原子例程的优先级0~4不会被FreeRTOS禁止,一般用于定时器;优先级5~15受FreeRTOS控制,一般用于外部中断、USART等;
(3)注意区分中断优先级和任务优先级,任务优先级数字越低表示任务的优先级越低, 0 的优先级最低, configMAX_PRIORITIES-1 的优先级最高。空闲任务的优先级最低,为 0。
(4)任务函数一般不允许跳出循环,如果一定要跳出循环的话在跳出循环以后一定要调用函数 vTaskDelete(NULL)删除此任务!
上一篇:STM32硬件IIC驱动设计
史海拾趣
|
Wap第三方流量统计系统的原罪问题手机无线互动之风的悄然兴起无疑已经成了wap建站的最大推助器。跟消费者建立一对一的沟通绝对是令人振奋的互动营销上上签。不论是对中大型企业门户wap站还是个人站长建站来说及时地了解“点对点式”用户的需 ...… 查看全部问答> |
|
请问T1管的集电极电阻到底该如何看,如何计算?因为以往的电路大都是一个集电极电阻RC接到电源,而这个图就不一样了,因为T1管的集电极接的是T2管,我就有些搞不太懂到底T1管的集电极电阻怎么算,有的人讲T1管的集电极电阻是R2+T2管C-B结的反偏电阻 ...… 查看全部问答> |
|
dereferencing type-punned pointer will break strict-aliasing rules static int print(char **out, int *varg) { register int width, pad; register int pc = 0; register char *format = (char *)(*varg++); &nb ...… 查看全部问答> |
|
序: 搞了几块aic3256,按照TI公司的原理图做了最小系统,想用F2812来驱动,结果老是不行,好,我想,既然这样,那就从最简单的开始一步一步慢慢来。于是种种问题就浮出水面…… ...… 查看全部问答> |
|
步入社会,你每天要和形形色色的人打交道,在社会的每个角落,你都不可能是孤立的,你必须要通过与其他人合作完成自己的工作任务。如果你在公司里工作,那么,你是否具有团队精神,直接关系到你的业绩。一些大公司招聘人才时,十分注重人才的团 ...… 查看全部问答> |
|
安泰测试维修中心根据多年的维修经验,帮大家分析示波器的几种特殊故障,供广大的电子仪器维修者参考和学习。 一、无扫描线 出现无扫描线故障时应先检查电源电路、示波管电路、触发扫描电路、X轴放大器等的工作是否正常。若这些部分工作都正常 ...… 查看全部问答> |




