历史上的今天
返回首页

历史上的今天

今天是: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)删除此任务!


推荐阅读

史海拾趣

CYAN公司的发展小趣事

1996年,瑞典的工程师Jan Nilsson在电子行业中创立了CYAN公司,专注于高性能网络设备的研发。在初创阶段,CYAN就凭借其独特的技术理念和创新的产品设计,赢得了市场的初步认可。公司推出了一款具有高效能和高可靠性的网络交换机,解决了当时网络传输中的瓶颈问题,从而在市场中崭露头角。

启攀微电子(Chiphomer)公司的发展小趣事

2009年,全球经济遭受金融海啸的冲击,启攀微电子也面临着巨大的市场压力。然而,公司并没有选择退缩,而是选择了坚守与创新。在经济危机的背景下,公司加强了产品推广和客户支持,同时加快了新品开发的步伐。经过几年的打拼,启攀微电子的消费类电子产品在手机领域取得了一定的市场认可,出货量大幅提升,市场份额稳步上升。

Echelon公司的发展小趣事

在激烈的市场竞争中,Echelon始终保持对技术的热情和追求。公司不断投入研发资源,对LonWorks技术进行升级和优化,推出了一系列创新的产品和服务。这些新产品和服务不仅提升了Echelon的市场竞争力,还为客户带来了更加高效、便捷的能源管理体验。同时,Echelon还积极与其他科技公司合作,共同研发新技术、新产品,推动整个行业的发展。

Gang Song Electronics Co Ltd公司的发展小趣事

在加入Telit后,GainSpan的技术和产品迅速在全球范围内得到推广和应用。Telit凭借其强大的市场网络和品牌影响力,将GainSpan的低功耗WiFi模组带到了更多的国家和地区。特别是在北美、欧洲和亚洲等物联网市场发展迅速的地区,GainSpan的技术和产品更是成为了众多企业和项目的首选。通过全球化布局,Telit进一步巩固了其在物联网市场的领先地位。

HOPERF公司的发展小趣事

随着技术的不断积累和市场的日益扩大,HOPERF开始着手整合产业链资源。公司不仅在ASIC芯片设计和MEMS传感芯片设计方面持续深耕,还逐步构建起包括封装测试校准技术、应用服务在内的完整产业链。同时,HOPERF积极实施全球化战略,在全球范围内招募顶尖研发设计人才,其中60%的专家级工程师来自德国、美国、瑞士等国际一流企业。这些举措极大地提升了公司的研发实力和市场竞争力,为公司的全球化发展奠定了人才和技术基础。

Gentron Corp公司的发展小趣事
确保触发器部分正常工作,无损坏或连接问题。可以尝试更换触发器或使用示波器检查触发信号。

问答坊 | AI 解惑

Wap第三方流量统计系统的原罪问题

Wap第三方流量统计系统的原罪问题手机无线互动之风的悄然兴起无疑已经成了wap建站的最大推助器。跟消费者建立一对一的沟通绝对是令人振奋的互动营销上上签。不论是对中大型企业门户wap站还是个人站长建站来说及时地了解“点对点式”用户的需 ...…

查看全部问答>

TTL反相器电路中某个三极管集电极电阻的计算问题

请问T1管的集电极电阻到底该如何看,如何计算?因为以往的电路大都是一个集电极电阻RC接到电源,而这个图就不一样了,因为T1管的集电极接的是T2管,我就有些搞不太懂到底T1管的集电极电阻怎么算,有的人讲T1管的集电极电阻是R2+T2管C-B结的反偏电阻 ...…

查看全部问答>

直流稳压电源 电子大赛培训资料

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 …

查看全部问答>

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 ...…

查看全部问答>

LED点阵显示仿真

LED点阵显示仿真----由浅入深之8X8,16X16,24X24LED点阵流动显示 一直以来,对LED点阵显示很感兴趣,特别是流动点阵显示。论坛里有不少例子,可是在我的电脑上大多无法正常运行。有的一运行就S机,能运行的,也是字符不清。于是,自己动手 ...…

查看全部问答>

CC2530发射功率

Zigbee协议栈(CC2530)发射功率最大能有多大呀,难道只有4.5dbm吗,请高手回答,谢谢…

查看全部问答>

闹心的DSP与codec器件通信

序:               搞了几块aic3256,按照TI公司的原理图做了最小系统,想用F2812来驱动,结果老是不行,好,我想,既然这样,那就从最简单的开始一步一步慢慢来。于是种种问题就浮出水面…… ...…

查看全部问答>

职场:出色拍档的六大要素

  步入社会,你每天要和形形色色的人打交道,在社会的每个角落,你都不可能是孤立的,你必须要通过与其他人合作完成自己的工作任务。如果你在公司里工作,那么,你是否具有团队精神,直接关系到你的业绩。一些大公司招聘人才时,十分注重人才的团 ...…

查看全部问答>

通用示波器几种常见故障的分析

安泰测试维修中心根据多年的维修经验,帮大家分析示波器的几种特殊故障,供广大的电子仪器维修者参考和学习。 一、无扫描线 出现无扫描线故障时应先检查电源电路、示波管电路、触发扫描电路、X轴放大器等的工作是否正常。若这些部分工作都正常 ...…

查看全部问答>