当前位置: 首页 > wzjs >正文

做运营的网站学习aspmvc网站开发 书

做运营的网站,学习aspmvc网站开发 书,百度网站建设工具,安卓页面跳转在 FreeRTOS 中,可以创建多个事件组,且这是常见的设计模式。事件组的数量仅受限于系统内存资源(每个事件组占用约 12-16 字节 RAM)。以下是关键细节和最佳实践: 1. 创建多个事件组的实现方法 1.1 动态创建&#xff08…

在 FreeRTOS 中,可以创建多个事件组,且这是常见的设计模式。事件组的数量仅受限于系统内存资源(每个事件组占用约 12-16 字节 RAM)。以下是关键细节和最佳实践:


1. 创建多个事件组的实现方法

1.1 动态创建(推荐)
#include "FreeRTOS.h"
#include "event_groups.h"// 创建两个独立的事件组
EventGroupHandle_t xEventGroup1 = xEventGroupCreate();
EventGroupHandle_t xEventGroup2 = xEventGroupCreate();
1.2 静态创建(需预先分配内存)
StaticEventGroup_t xEventGroupBuffer1, xEventGroupBuffer2;
EventGroupHandle_t xEventGroup1 = xEventGroupCreateStatic(&xEventGroupBuffer1);
EventGroupHandle_t xEventGroup2 = xEventGroupCreateStatic(&xEventGroupBuffer2);

2. 多事件组的典型应用场景

2.1 模块化设计
  • 场景:不同功能模块使用独立的事件组,避免事件位冲突。
    // 传感器模块专用事件组
    #define SENSOR_DATA_READY_BIT (1 << 0)
    EventGroupHandle_t xSensorEventGroup = xEventGroupCreate();// 通信模块专用事件组
    #define NETWORK_CONNECTED_BIT (1 << 0)
    EventGroupHandle_t xNetworkEventGroup = xEventGroupCreate();
    
2.2 多任务独立同步
  • 场景:每个任务等待自己专属的事件组,减少耦合。
    void vTaskA(void *pvParameters) {while (1) {// 等待事件组1的 BIT_0xEventGroupWaitBits(xEventGroup1, BIT_0, pdTRUE, pdTRUE, portMAX_DELAY);// 处理事件...}
    }void vTaskB(void *pvParameters) {while (1) {// 等待事件组2的 BIT_1xEventGroupWaitBits(xEventGroup2, BIT_1, pdTRUE, pdTRUE, portMAX_DELAY);// 处理事件...}
    }
    

3. 多事件组的资源管理与优化

3.1 内存占用
  • 每个事件组占用约 12-16 字节 RAM(具体取决于硬件架构)。
  • 建议:在资源受限的系统中,避免过度创建事件组。可通过复用事件位或合并逻辑减少数量。
3.2 事件位规划
  • 独立分配:为每个事件组单独定义事件位,避免跨组混淆:
    // 事件组1的事件位
    #define GROUP1_BIT0 (1 << 0)
    #define GROUP1_BIT1 (1 << 1)// 事件组2的事件位
    #define GROUP2_BIT0 (1 << 0)
    
3.3 错误处理
  • 检查事件组创建是否成功:
    if (xEventGroup1 == NULL) {// 内存不足,处理错误
    }
    

4. 多事件组 vs 单一事件组

场景多事件组单一事件组
事件位冲突风险低(事件位独立)高(需全局管理事件位)
代码可维护性高(模块化设计)低(逻辑集中)
内存消耗较高(每个组占用独立内存)低(仅一个组)
适用场景复杂系统、多模块协作简单系统、少量事件

5. 完整示例:多事件组控制

// 定义两个事件组和各自的事件位
EventGroupHandle_t xMotorEventGroup, xSensorEventGroup;
#define MOTOR_START_BIT (1 << 0)
#define SENSOR_DATA_READY_BIT (1 << 0)void vMotorTask(void *pvParameters) {while (1) {// 等待电机启动事件xEventGroupWaitBits(xMotorEventGroup, MOTOR_START_BIT, pdTRUE, pdTRUE, portMAX_DELAY);// 启动电机...}
}void vSensorTask(void *pvParameters) {while (1) {// 等待传感器数据就绪xEventGroupWaitBits(xSensorEventGroup, SENSOR_DATA_READY_BIT, pdTRUE, pdTRUE, portMAX_DELAY);// 处理数据...}
}void vControlTask(void *pvParameters) {while (1) {vTaskDelay(pdMS_TO_TICKS(1000));// 触发电机启动xEventGroupSetBits(xMotorEventGroup, MOTOR_START_BIT);// 触发传感器数据就绪xEventGroupSetBits(xSensorEventGroup, SENSOR_DATA_READY_BIT);}
}int main() {// 创建事件组xMotorEventGroup = xEventGroupCreate();xSensorEventGroup = xEventGroupCreate();// 创建任务xTaskCreate(vMotorTask, "Motor", 1024, NULL, 2, NULL);xTaskCreate(vSensorTask, "Sensor", 1024, NULL, 2, NULL);xTaskCreate(vControlTask, "Control", 1024, NULL, 1, NULL);vTaskStartScheduler();return 0;
}

结论

在 FreeRTOS 中,创建多个事件组是完全可行的,且是管理复杂系统事件的有效手段。合理使用多事件组可以:

  1. 降低模块间耦合度
  2. 避免事件位冲突
  3. 提升代码可维护性

唯一需要注意的是:在资源受限的嵌入式系统中,需平衡事件组数量和内存消耗

http://www.dtcms.com/wzjs/559945.html

相关文章:

  • 企业网站建设策划书怎么写网站项目总体设计模板
  • wordpress网站排行专业的网站制作设计
  • 怎么做网站logowordpress登陆注册插件
  • 旅游营销型网站建设网站建设哪个便宜
  • php网站开发实用技术练习题网页设计最重要的是什么
  • 公司做网站还是做阿里好呢龙岗网站建设公司网络服务
  • 沧州网站建设微艾薇品牌专业群建设网站
  • win2008 iis 新建网站海口网站建设加王道下拉
  • 东莞南海网站制作百度产品优化排名软件
  • 西安网站优化招聘网推荐电商网站建设
  • 如何创建自己公司的网站交互式多媒体网站开发
  • 学校风采网站建设需求如何建立一个网站平台
  • 织梦网站修改使用教程把网站做静态化
  • 网站建设公司长春kuler 网站
  • 南京网页网站制作网件官网
  • 个人网站平台设计网站官网有哪些
  • 郑州网站优化旅游app界面设计
  • 互联网网站建设案例制作网站 服务器配置
  • 阿凡达做网站电话有限公司注册资金多少有什么区别
  • 网站开发回扣湖北正规网站建设质量保障
  • 重庆网站排名优化郑州哪家做网站最好
  • 网站提示代码建设个人网站可以卖产品吗
  • 免费做网站的好不好怎么做阿里国际网站的数据分析
  • 莆田网站建设优化石家庄设计网站公司
  • 网站建设数据库类型定制做网站技术
  • 外贸网站建设及优化ppt模块上海松江招聘网最新招聘
  • 专业网站制作网络公司常德网站建设全域云
  • 深圳网站设计设计h5小游戏源码大全
  • 贵州网站建设hsyunso济南建站免费模板
  • 张家港注册公司流程和费用seo技巧seo排名优化