c - 在 FreeRTOS 中处理队列最经济的方法是什么?
问题描述
我正在使用FreeRTOS ,并且在使用xTaskCreate()
. 该任务只处理接收到的网络数据包。这是任务的实现:
while(1) {
if(sys_link_recv_queue != NULL) {
mb32_packet_t packet;
if(xQueueReceive(sys_link_recv_queue, &packet, portMAX_DELAY)==pdPASS) {
// process packet ...
}
}
}
使用portMAX_DELAY
时,队列会无限期地等待,直到队列项可用。我现在的问题是,在这种等待状态下我是否会浪费宝贵的 CPU 时间,或者这是否是推荐的方法。如果这不是最经济的方式,还有什么替代方案?
解决方案
你不。它不是轮询。您的任务将进入阻塞状态,并且不会“消耗”任何 CPU 时间。当某物将某物放入该队列时,您的任务状态将更改为“等待”或“可运行”并最终执行。
推荐阅读
- forms - 如何将页面模型对象属性连接到对象列表(来自数据库)
- python - 如何使用 selenium 从 html 中提取列表,然后在 python 脚本中使用它来查找元素
- python - ElasticBeanstalk - SQLite 版本错误,如何为我的 django 项目解决此问题?
- elasticsearch - 如何使用 Dockerfile 和/或 Docker-Compose 配置 Elastic Search Ingest 管道?
- c# - 想要检索 URL 的完整路径
- python - 有什么办法可以正常退货吗?
- java - 如何在集成测试中使用 Spring Security?
- core-data - 将 NSValueTransformer 更改为 NSSecureUnarchiveFromDataTransformer 以获取核心数据警告
- javascript - useEffect 中的道具“未定义”
- angular - 订阅不会更新 Angular 中的视图