作业 4.19

1.总结二进制信号量和计数型信号量的区别,以及他们的使用场景。

二进制信号量:信号量的数值只能是0和1,用于共享资源的访问

计数型信号量:信号量的值都是大于或者等于2,实现生产者和消费者模型

2.使用技术型信号量完成生产者和消费者模型实验。


void StartDefaultTask(void *argument)
{
  for(;;)
  {
    osSemaphoreRelease(myCountingSem01Handle);    
    printf("生产1\r\n");
    osSemaphoreRelease(myCountingSem01Handle);    
    printf("生产2\r\n");
    osDelay(500);
  }
}
 
void StartTask02(void *argument)
{
  for(;;)
  {
    osSemaphoreAcquire(myCountingSem01Handle,osWaitForever);
    printf("消费者1\r\n");
    osSemaphoreAcquire(myCountingSem01Handle,osWaitForever);
    printf("消费者2\r\n");
    osSemaphoreAcquire(myCountingSem01Handle,osWaitForever);
    printf("消费者3\r\n");
    osDelay(500);
  }

3.总结FreeRTOS中同步和互斥的五种方法的使用方法

//创建队列函数
osMessageQueueId_t osMessageQueueNew (uint32_t msg_count,

                                                                        uint32_t msg_size,

                                                                                const osMessageQueueAttr_t *attr

                                                                                )

//队列写函数
osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id,

                                                                const void *msg_ptr,

                                                                uint8_t msg_prio, uint32_t timeout

                                                                        )

//队列读函数
osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id,

                                                        void *msg_ptr,

                                                        uint8_t *msg_prio,

                                                        uint32_t timeout

                                                                )

2)信号量

//创建信号量的函数:
osSemaphoreId_t osSemaphoreNew (uint32_t max_count,

                                                                uint32_t initial_count,

                                                                const osSemaphoreAttr_t *attr

                                                                        )

互斥量:用于保护共享资源

4)事件组:允许任务等待多个事件的状态,并且可以在任何事件被设置时唤醒等待的任务

5)任务通知:通知任务,用来实现任务之间的同步和互斥
4.总结任务通知和其他任务通信机制的区别

1)任务通知无需创建,可以直接使用,通过任务控制块来实现(TCB),队列、信号量、互斥量、事件组都需要创建后才能使用。

2)任务通知所需的资源比队列、信号量、互斥量、事件组要少。

3)队列、信号量、互斥量、事件组主要用于多对多之间的通信,任务通知是一对一之间的通信。

5.根据文档和录屏学习一下软件定时器,了解软件定时器的作用和软件定时器和硬件定时器的区别

软件定时器的作用:在指定的时间到来时执行指定的函数,或者以某个频率周期性地执行某个函数。被执行的函数叫做软件定时器回调函数。

区别:

1)硬件定时器精度比软件定时器高

2)软件定时器消耗的资源比较多

3)软件定时器的数量理论上没有限制,硬件定时器的数量和硬件相关

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值