本文主要是介绍4/4 清明work,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.总结二进制信号量和计数型信号量的区别,以及他们的使用场景。
二进制信号量:最快的最常用的信号量,可用于同步或互斥。
二进制信号量能够满足任务间的互斥和同步,需要
的系统开销最小,因此也称快速信号量。二进制信
号量可以看成一个标志,对应资源是可用还是不可
用。当一个任务调用semTake ()请求一个信号量时
,如果此时信号量可用,信号量会被清零,并且任务
立即继续执行;如果信号量不可用,任务会被阻塞来
等待信号量。
计数信号量:类似于二进制信号量,但是随信号量释
放的次数改变而改变。计数器信号量是实现任务同步
和互斥的另一种手段,在具体实现上有点差异。计数器
信号量除了像二进制信号量那样工作外,还保持对信号
量释放次数的跟踪。
2.使用技术型信号量完成生产者和消费者模型实验。
for(;;){//share_data=1;printf("shop is ok\r\n");osThreadFlagsSet(myEvent01Handle,SHOP);osDelay(500);printf("wash is ok\r\n");osThreadFlagsSet(myEvent01Handle,WASH);osDelay(500);;printf("cook is ok\r\n");osThreadFlagsSet(myEvent01Handle,COOK);osDelay(500);;
}for(;;){printf("I want to eat\r\n");osThreadFlagsWait(SHOP| WASH|COOK,osFlagsWaitAll,osWaitForever);printf("go to eat\r\n");osDelay(500);}
3.总结FreeRTOS中同步和互斥的五种方法的使用方法
队列、信号量、互斥量、事件组、任务通知。
4.总结任务通知和其他任务通信机制的区别
队列、信号量、互斥量、事件组在使用之前都需要先创建,才能使用。
任务通知无需创建即可使用。
队列、信号量、互斥量、事件组 多对多通信。
任务通知是多对一通信。(只需要知道要通知的任务ID即可)
队列、信号量、互斥量、事件组需要被创建,所以消耗的资源也是比较多。
任务通知不需要被创建消耗的资源少。
5.根据文档和录屏学习一下软件定时器,了解软件定时器的作用和软件定时器和硬件定时器的区别
一般硬件定时器集成在CPU的内部,有的可以使用外置的硬件定时器芯片,可以人
为通过编程来设置硬件定时器的工作频率,硬件定时器一旦设定好了工作频率,只要
上电,那么硬件定时器就会周期性的给CPU输出一个中断信号,称这个中断信号为时
钟中断,linux内核已经实现好了时钟中断对应的服务程序,这个服务程序也称之为
时钟中断服务函数,既然硬件定时器周期性的给CPU产生时钟中断,那么对应的中断
服务程序就会被内核周期性的调用
软件定时器是在硬件定时器基础之上出来的定时器,可以由一个硬件定时器模拟出成千
上万个软件定时器,这样程序在需要使用较多定时器的时候就不会受限于硬件资源的不
足,这是软件定时器的一个优点,即数量不受限制。但由于软件定时器是通过程序实现
的,其运行和维护都需要耗费一定的CPU资源,同时精度也相对硬件定时器要差一些。
这篇关于4/4 清明work的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!