完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.信号量和计数信号量的概念
这里有关这两个概念的介绍的博文很多,如果你刚入门连这两个概念你都不清楚,这时候你就需要多去看些有关的文章或者资料。当然也可以参考我上传的《FreeRTOS入门手册》里面的有关介绍,里面还是介绍的很详细的。这里我就不累述这些理解性的概念,这里我直接给出两幅图,在文章结尾帮助大家理解。 2.代码编程实现 (1)应用场景 这里我们既然要应用到实际代码中,自然也要谈到我们在实际应用中对于信号量和计数信号量的使用场景。信号量这里大多数应用都是应用在任务同步中。特别对于中断同步来说,对于有芯片编程的经验的朋友应该都知道,中断函数中我们尽可能是少做事情,这样CPU的工作效率以及整体的性能都会得到提升。信号量在系统应用中就多用在中断函数的同步中,当然任务同步也可以,这些都是根据你个人的项目需求而定。下面我直接给出我测试实现中断函数同步功能的代码,这里有关函数的使用和解释, 大家也可以参考我的博客资源里面的 《FreeRTOS入门手册》。 (2)相关理论知识 这里我们在系统中用到中断,自然要了解系统的优先级的结构有所了解。FreeRTOS是一个高度可剪裁的操作系统,这里有关整个系统的优先级涉及的有关宏定义这里我也参考了几篇网友的博文,感谢这几位网友。下面我会给出他们的文章链接,建议大家一定要去阅读和理解清楚,无论对现在的学习,还是今后的项目需要来说都是必须的。这里在结合FreeRTOS使用之前,我们也必须对CotexM-3的内核有一定了解,以及使用这个内核的芯片的优先级的设置相关知识。 (3)代码实现 SemaphoreHandle_t xSemaphore; //定义一个二值信号量或者计数信号量的句柄 int main(void) { NVIC_Configuration(); #if DEBUG》0 Usart_IO(); Debug_Usart_Init(115200); #endif //xSemaphore=xSemaphoreCreateBinary(); //创建一个二值信号量 3.学习总结 (1)中断函数是每接收一个字节数据就进入一次中断,这里我们在中断函数中应该有相关数据判断确认我们接收到一个完整的数据包之后我们再经行一次相关二值信号量的函数操作。 (2)这里实际测试发现,我们利用二值量使得与中断几乎同步执行的函数这里建议优先级尽量高于其他任务函数的优先级,用来保证同步函数可以得到执行。这里如果其他任务函数优先级高于同步函数的优先级并且这个函数中没有 vTaskDel( 700 /portTICK_RATE_MS ); 相关的任务调度函数,同步函数将永远得不到执行,这是非常危险的事情。 (3) 计数信号量作为一个可以锁存多个同步事件的变量,当我们执行了多少次xSemaphoreGiveFromISR这个函数,同步函数就会执行多少次,当然我们的数值不能超过创建计数信号量函数中的第一个参数的值。 (4)使用计数信号量的相关函数,需要打开这个宏定义#define configUSE_COUNTING_SEMAPHORES 1FreeRTOSConfig.h文件中这个宏定义系统默认是0在FreeRTOS.h文件中。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1394 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1387 浏览 1 评论
809 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
582 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1428 浏览 2 评论
1775浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
507浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
439浏览 3评论
429浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
406浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-6 03:51 , Processed in 0.895913 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号