完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
移植正点原子的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)删除此任务! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:42 , Processed in 0.957471 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号