1329_FreeRTOS从中断ISR中发送队列消息实现分析

全部学习汇总: https://github.com/GreyZhang/g_FreeRTOS

一上来,先进行了一些信号有效性的检查。同时也检查了中断优先级的合理性,这个主要是考虑不要出现非OS托管的中断。

设置了ISR中的中断保护,进行实质的队列数据搬运。

这一段代码在我现在的配置中是不生效的。

这一段才是if条件成立会执行处理的部分。这部分的代码做了两件事情,第一个是如果是有等待这个队列中信号的任务,那么这个时候需要激活或者标注后续激活相应的任务。

如果队列锁住了,锁住的状态信息增加1。如果写不进去,那么得提示队列满了。处理完之后,增加三明治结构的另外一片。

以上就是从ISR中发送队列信息的处理过程。

跟前面的接口类似,give的这个接口的不同点在于这个只提供激励信号,不需要传输数据。整个接口的设计,其实跟前面看过的队列发送接口结构相似。

有了前面的接口分析,其实这个接口的解读就非常简单了。这两部分最大的一个差异点在于少了队列中数据的搬运,因此也可以看得出来纯粹的激活信号处理的时候,这个接口的效果更高。

以上就是FreeRTOS从中断ISR中进行队列数据或者信号发送的实现的简单分析,还比较简单。根本的修改点其实就是2个,其中一个两个都有的是任务的激活处理,而另一个则是只属于队列的数据搬运。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS是一个开源的实时操作系统内核,被广泛应用于嵌入式系统。ESP32是一款具有双核处理器和Wi-Fi功能的芯片,通过使用ESP-IDF开发框架可以进行软件开发。在ESP32-IDF开发,使用FreeRTOS消息队列可以实现不同任务之间的通信。 在ESP32开发,可以通过中断服务程序(Interrupt Service Routine,ISR)来发送消息消息队列,并在任务通过接收方法响应。 首先,我们需要创建一个全局的消息队列句柄,可以使用xQueueCreate函数来创建一个消息队列。例如,可以使用以下代码创建一个大小为10的消息队列: xQueueHandle messageQueue = xQueueCreate(10, sizeof(int)); 然后,在中断服务程序,可以使用xQueueSendFromISR方法将消息发送消息队列。例如,可以使用以下代码将一个整数值发送消息队列: int value = 100; xQueueSendFromISR(messageQueue, &value, NULL); 在任务,可以使用xQueueReceive方法从消息队列接收消息并进行响应。例如,可以使用以下代码从消息队列接收一个整数值并打印出来: int receivedValue; xQueueReceive(messageQueue, &receivedValue, portMAX_DELAY); printf("Received value: %d\n", receivedValue); 需要注意的是,在接收消息时,可以通过指定第三个参数来设置等待时间。例如,使用portMAX_DELAY表示无限等待,即直到接收到消息为止。 通过以上步骤,我们可以实现在ESP32开发使用FreeRTOS消息队列进行中断服务消息发送与响应。这种方式可以实现不同任务之间的通信和同步,提高系统的并发性和实时性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值