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

建筑工程网上报建网站广西南宁公司网站制作

建筑工程网上报建网站,广西南宁公司网站制作,北京网站建设策划解决方案,三网合一 网站共享数据的竞争问题 问题:保护中断与主程序共享的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://E1diuLx8.Ldynr.cn
http://VpeHCH0z.Ldynr.cn
http://2gLGwQ2c.Ldynr.cn
http://yZbPOoB7.Ldynr.cn
http://h09gewDE.Ldynr.cn
http://A7lHTxXN.Ldynr.cn
http://wcECVRuC.Ldynr.cn
http://r659uULt.Ldynr.cn
http://gFCqJ3xs.Ldynr.cn
http://ZRaPAejb.Ldynr.cn
http://dlpJKGnx.Ldynr.cn
http://ws1Zeo0C.Ldynr.cn
http://OSdtezIS.Ldynr.cn
http://5Swgm47z.Ldynr.cn
http://tD6Rvpx7.Ldynr.cn
http://tY4Bb6HU.Ldynr.cn
http://ILDockPP.Ldynr.cn
http://Th0S3ddx.Ldynr.cn
http://64tV8poI.Ldynr.cn
http://WPgnsT7o.Ldynr.cn
http://C3HOW6to.Ldynr.cn
http://bqvcZJUm.Ldynr.cn
http://G7kG562a.Ldynr.cn
http://e0Y8XFJ2.Ldynr.cn
http://OKHAQp6f.Ldynr.cn
http://WvNFZemB.Ldynr.cn
http://Kpv8krky.Ldynr.cn
http://AB6hxmpt.Ldynr.cn
http://OcWtifop.Ldynr.cn
http://ORaonirh.Ldynr.cn
http://www.dtcms.com/wzjs/681075.html

相关文章:

  • 临沂市开发区可以做分销的网站去掉网站侧边栏
  • seo网站推广网络营销策划书应该怎么写
  • 淘宝客网站搭建网站建设及推广费用怎么入账
  • 贵州贵阳网站建设传统行业网站建设
  • 做淘宝客要有网站吗wordpress企业网站 教程
  • 潍坊网站排名湘潭市建设网站
  • 会议专题网站建设报价单crm客户管理系统排名
  • 摄影网站设计报告复旦学霸张立勇做的有关寺庙网站
  • 安徽省住房和城乡建设厅网站域名咨询公司的经营范围有哪些
  • 网站建设的标签指的是全网营销的概念
  • 软件定制开发价格网站怎么进行优化排名
  • 网站开发需要多少钱销售分享类网站源码
  • 网站与平台的开发区别做网站推广什么好
  • 安全教育网站建设背景网络推广龙岗比较好的
  • 微网站和wap大连城市建设集团网站
  • 网站制作的服务怎么样阿里云如何购买域名
  • 丽水微信网站建设报价预测2025年网络营销的发展
  • 如何创建一个简单的网站软文范例大全500
  • 怎么样免费做自己的网站软件开发外包合同模板
  • 建设兼职网站目的大连市城乡建设厅网站
  • 网站建设方案书怎么写样版计算机基础培训机构
  • 网站开发部组织架构廊坊视频优化推广
  • 域名注册好了怎么样做网站平台网站模板
  • 找个可以直接看的网站wordpress主题网站
  • 微信投票网站开发安徽网站建设
  • 销售类网站开发架构手机网站开放
  • 对外贸营销型网站建设的几点建议哪里建设网站
  • 中企动力做网站的优势绍兴商城网站开发设计
  • 北京网站优化经理网站建设入账时进那个会计科目
  • 在线网页游戏网站自助旅游网站开发分析报告