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

做网站的一般多少钱酒店网站建设因素

做网站的一般多少钱,酒店网站建设因素,广西地矿建设集团网站,网络推广诊断分析策划书共享数据的竞争问题 问题:保护中断与主程序共享的avg_data方法一:使用关中断保护1. 添加关中断宏2. 修改数据读取代码3. 修改中断服务程序(ISR) 方法二:使用原子操作(需平台支持)1. 定义原子类型…

共享数据的竞争问题

  • 问题:保护中断与主程序共享的avg_data
    • 方法一:使用关中断保护
      • 1. 添加关中断宏
      • 2. 修改数据读取代码
      • 3. 修改中断服务程序(ISR)
    • 方法二:使用原子操作(需平台支持)
      • 1. 定义原子类型
      • 2. 修改数据访问代码
    • 方法三:使用RTOS同步机制(如信号量)
      • 1. 扩展通道结构体
      • 2. 初始化信号量
      • 3. 保护数据访问
  • 方案对比与选型建议
  • 关键验证点

问题:保护中断与主程序共享的avg_data

在嵌入式系统中,中断服务程序(ISR)和主程序(或任务)共享数据时,必须确保访问的原子性可见性。以下是针对该问题的具体修改步骤:

方法一:使用关中断保护

此方法通过临时禁用中断来确保对共享变量的原子访问,适用于所有平台。

1. 添加关中断宏

在头文件中定义关中断宏:

2. 修改数据读取代码

hal_get_data 函数中保护 avg_data 的读取:

int hal_get_data() {ENTER_CRITICAL();   // 进入临界区(关中断)*val = avg_data;   // 安全读取共享数据EXIT_CRITICAL();    // 退出临界区(开中断)return 0;
}

3. 修改中断服务程序(ISR)

module_isr 中保护 avg_data 的写入:

irqreturn_t module_isr() {ENTER_CRITICAL();avg_data = 8888;// 安全更新 avg_dataEXIT_CRITICAL();sem_give(complete);}// ...
}

注意这个做法是有风险的,在中断处理函数中关中断需谨慎,可能破坏中断上下文的状态或影响实时性详细分析见博客

方法二:使用原子操作(需平台支持)

如果目标平台支持对 u16 类型的原子访问(如ARM Cortex-M),可使用原子操作。

1. 定义原子类型

在结构体中声明 avg_data 为原子变量:

#include <stdatomic.h>struct siliumixi {// ..._Atomic u16 avg_data; // C11原子类型// ...
};

2. 修改数据访问代码

  • ISR中原子写入

    atomic_store(&chan->avg_data, calculated_value);
    
  • 主程序原子读取

        *val = atomic_load(&chan->avg_data); // 原子读取
    

方法三:使用RTOS同步机制(如信号量)

在RTOS环境中,可通过信号量确保数据访问的同步。

1. 扩展通道结构体

struct siliumixi {// ...sem_t data_sem; // 新增信号量// ...
};

2. 初始化信号量

在初始化时创建信号量:

    chan->data_sem = sem_create(1); // 初始值为1(二进制信号量)
}

3. 保护数据访问

  • ISR中释放信号量

    sem_take(chan->data_sem, 0);    // 获取信号量(非阻塞)chan->avg_data = 8888;      // 更新数据aicos_sem_give(chan->data_sem);       // 释放信号量}// ...
    }
    
  • 主程序获取信号量

        if (sem_take(chan->data_sem, timeout) != 0)return -ETIMEDOUT;*val = chan->avg_data;}
    

方案对比与选型建议

方案优点缺点适用场景
关中断简单高效,无额外资源消耗影响中断响应实时性低延迟、单核嵌入式系统
原子操作代码简洁,无锁竞争依赖平台原子操作支持支持C11原子类型的平台
RTOS信号量兼容多任务环境,灵活增加RTOS开销,需处理信号量超时基于RTOS的多任务系统

关键验证点

  1. 原子性测试:在高低优先级任务/中断同时访问时,数据是否一致。
  2. 性能测试:关中断时长是否影响其他中断响应(使用示波器测量最坏关中断时间)。
  3. 资源占用:信号量或原子操作是否增加内存/CPU开销。

通过上述任一方法,可有效解决共享数据 chan->avg_data 的竞争问题

http://www.dtcms.com/a/420594.html

相关文章:

  • 最权威的做网站设计公司价格Wordpress装好只能访问
  • 小精灵儿童网站免费做踢芯片设计公司
  • 上海网站建设开发哪家好深圳网站如何制作
  • 平面设计资源网站网站建设西街
  • 中山做网站联系电话网站规划与开发技术专业
  • o2o网站建设基本流程爱企查企业服务平台
  • signal_connect
  • 什么是网站反向链接wordpress 到访人数
  • 自己做的视频可以传别的网站去吗.net开发微信网站
  • 网站如何做淘客桐城网站建设
  • 5、Lombok原理深入剖析:编译期注解处理机制与替代方案对比
  • 简述织梦网站上传步骤东莞外贸建站及推广
  • pid控制作为反馈控制,增加前馈控制,什么是前馈控制解释
  • 成品网站w灬源码火龙果住房和规划建设局网站
  • wordpress上传网站模板wordpress cms
  • MCU模块系统时钟
  • 温州 网站制作wordpress 自动升级
  • memblock-1
  • 云南住房和城乡建设厅网站首页网站建设策划基本流程
  • 深度学习核心技术演进:从函数到 Transformer 架构
  • 圣耀做单网站商城类小程序
  • 仿贴吧的网站网站建设费账务处理
  • 博客网站源码带后台前端电商网站登录界面怎么做
  • 成都网站建设平台郑州建站优化
  • 手机wap网站免费制作中山最好的网站建设公司哪家好
  • 网站阵地建设管理办法微网站建设网站
  • 郑州网站制作哪家便宜租房平台网站开发
  • 详解MySQL中的索引、事务和锁
  • 用cms织梦做网站图文教程网站优化计划
  • [C++项目组件]Etcd的简单介绍和使用