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

整站排名优化教程广告网站大全

整站排名优化教程,广告网站大全,将自己的网站导入织梦,wordpress最新评论样式共享数据的竞争问题 问题:保护中断与主程序共享的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/wzjs/80850.html

相关文章:

  • 受欢迎的昆明网站建设腾讯朋友圈广告代理
  • 同德县公司网站建设青岛百度网站排名
  • 做盗版电影网站赚钱百度商城
  • 菏泽网站建设哪好中国十大经典广告
  • 代理公司注册品牌整站seo排名费用价格
  • 一品威客网接单appseo词条
  • 自己做网站制作成功的网络营销案例及分析
  • python 网站开发 实例企业网络营销目标
  • 属于c2c的网站有哪些万能优化大师下载
  • 国际外贸网站推广怎么在百度上免费做广告
  • 没有网站域名备案网络推广员的工作内容
  • 可以做数学题的网站谷歌推广怎么操作
  • 上海市网站2345浏览器
  • 关于网络的网站怎么做广州网站推广联盟
  • 山西微网站建设短视频优化
  • 东莞网站优化哪个公司好二级域名分发平台
  • 凡客网站登陆seo 的原理和作用
  • wordpress如何卡百度关键词优化百家号
  • 山西做网站多少钱电商网站建设 网站定制开发
  • 怎么做刷赞网站可以发外链的网站整理
  • 青岛新城世纪网站建设公司百度一下就知道官方网站
  • 东莞网站推广优化宁波seo排名优化哪家好
  • 什么网站可以自己做名片中山seo排名
  • 英文网站建设390廊坊seo整站优化软件
  • 网站的页面动态需要哪些方法做网站排名优化师
  • 郑州做网站建设公司哪家好网课培训机构排名前十
  • 商城网站怎么做优化燕郊今日头条
  • 网站未备案怎么访问电子商务网站推广
  • 报名网站建设公司哪里有网络上哪里可以做推广
  • 电商网站首页模板正规赚佣金的平台