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

企业展示网站源码域名注册后如何建网站

企业展示网站源码,域名注册后如何建网站,凡科做网站要钱,校园网络设计单片机主循环与中断资源访问冲突案例分析 在嵌入式系统中,主循环(Main Loop)和中断服务程序(ISR)共享资源时,如果处理不当,会引发竞态条件(Race Condition)或数据不一致…

单片机主循环与中断资源访问冲突案例分析

在嵌入式系统中,主循环(Main Loop)和中断服务程序(ISR)共享资源时,如果处理不当,会引发竞态条件(Race Condition)或数据不一致问题。下面通过几个典型案例进行说明:

案例1:共享变量访问冲突

场景描述

  • 主循环:周期性读取传感器数据并计算平均值
  • 定时器中断:每10ms更新一次传感器原始数据

冲突代码示例

uint16_t sensorData;  // 共享资源// 主循环
void main(void) {uint32_t sum = 0;uint8_t count = 0;while(1) {sum += sensorData;  // ① 读取共享变量count++;if(count >= 100) {printf("Average: %lu\n", sum / count);sum = 0;count = 0;}}
}// 定时器中断服务程序
void TIMER_ISR(void) {sensorData = ReadSensor();  // ② 更新共享变量
}

冲突原因

  • 当主循环执行①行读取sensorData时,可能被②行的中断打断
  • 若中断更新了sensorData,主循环可能读取到部分更新的数据
  • 导致计算的平均值不准确

解决方案

uint16_t sensorData;
bool dataUpdated = false;// 主循环
void main(void) {uint32_t sum = 0;uint8_t count = 0;while(1) {uint16_t localData;__disable_irq();           // 关中断if(dataUpdated) {localData = sensorData;dataUpdated = false;}__enable_irq();            // 开中断if(!dataUpdated) {sum += localData;count++;// ...}}
}// 定时器中断服务程序
void TIMER_ISR(void) {sensorData = ReadSensor();dataUpdated = true;
}

案例2:缓冲区访问冲突

场景描述

  • 主循环:处理串口接收缓冲区数据
  • 串口中断:将接收到的字节存入缓冲区

冲突代码示例

#define BUFFER_SIZE 16
uint8_t rxBuffer[BUFFER_SIZE];
uint8_t bufferHead = 0;
uint8_t bufferTail = 0;// 主循环
void main(void) {while(1) {if(bufferHead != bufferTail) {  // ① 检查缓冲区是否有数据uint8_t data = rxBuffer[bufferTail];  // ② 读取数据bufferTail = (bufferTail + 1) % BUFFER_SIZE;  // ③ 更新尾指针ProcessData(data);}}
}// 串口接收中断
void UART_RX_ISR(void) {uint8_t data = UART_Read();rxBuffer[bufferHead] = data;  // ④ 写入数据bufferHead = (bufferHead + 1) % BUFFER_SIZE;  // ⑤ 更新头指针
}

冲突原因

  • 当主循环执行①-③行操作时,可能被④-⑤行的中断打断
  • 若中断更新了bufferHead,主循环可能误判缓冲区状态
  • 导致数据丢失或缓冲区溢出

解决方案

#define BUFFER_SIZE 16
uint8_t rxBuffer[BUFFER_SIZE];
uint8_t bufferHead = 0;
uint8_t bufferTail = 0;// 主循环
void main(void) {while(1) {uint8_t localHead;__disable_irq();localHead = bufferHead;__enable_irq();if(localHead != bufferTail) {uint8_t data = rxBuffer[bufferTail];__disable_irq();bufferTail = (bufferTail + 1) % BUFFER_SIZE;__enable_irq();ProcessData(data);}}
}// 串口接收中断
void UART_RX_ISR(void) {uint8_t data = UART_Read();uint8_t nextHead = (bufferHead + 1) % BUFFER_SIZE;if(nextHead != bufferTail) {  // 检查缓冲区是否已满rxBuffer[bufferHead] = data;bufferHead = nextHead;} else {HandleBufferOverflow();}
}

案例3:外设操作冲突

场景描述

  • 主循环:配置SPI接口并发送数据到Flash
  • 定时器中断:周期性采集ADC数据并通过SPI发送到外部设备

冲突代码示例

// 主循环
void main(void) {while(1) {SPI_Configure(SPI_MODE_FLASH);  // ① 配置SPI为Flash模式SPI_Write(flashData, FLASH_SIZE);  // ② 发送数据到Flash// ...}
}// 定时器中断
void TIMER_ISR(void) {uint16_t adcData = ADC_Read();SPI_Configure(SPI_MODE_SENSOR);  // ③ 配置SPI为传感器模式SPI_Write(&adcData, 2);  // ④ 发送ADC数据
}

冲突原因

  • 主循环执行①-②行时,可能被③-④行的中断打断
  • 中断修改了SPI配置,导致主循环发送的数据格式错误
  • 造成Flash写入失败或数据传输错误

解决方案

bool spiBusy = false;// 主循环
void main(void) {while(1) {if(!spiBusy) {spiBusy = true;SPI_Configure(SPI_MODE_FLASH);SPI_Write(flashData, FLASH_SIZE);spiBusy = false;}}
}// 定时器中断
void TIMER_ISR(void) {if(!spiBusy) {uint16_t adcData = ADC_Read();spiBusy = true;SPI_Configure(SPI_MODE_SENSOR);SPI_Write(&adcData, 2);spiBusy = false;}
}

冲突预防原则

  1. 最小化临界区:只在访问共享资源的短时间内关中断
  2. 使用原子操作:对标志位等简单变量使用原子操作
  3. 资源状态管理:使用标志位标记资源是否正在使用
  4. 中断优先级控制:关键任务使用更高优先级中断
  5. 数据复制:中断中只进行数据采集,处理放到主循环

通过合理的资源管理和同步机制,可以有效避免主循环与中断之间的冲突。


文章转载自:
http://dinncomacrencephalia.tpps.cn
http://dinncocrashproof.tpps.cn
http://dinncostatistical.tpps.cn
http://dinncosaber.tpps.cn
http://dinncomessdeck.tpps.cn
http://dinncoroturier.tpps.cn
http://dinncoplainclothes.tpps.cn
http://dinncoquiff.tpps.cn
http://dinncoleporide.tpps.cn
http://dinncowhitest.tpps.cn
http://dinncorumania.tpps.cn
http://dinncobruges.tpps.cn
http://dinncodermestid.tpps.cn
http://dinncoinstable.tpps.cn
http://dinncosco.tpps.cn
http://dinncotolyl.tpps.cn
http://dinncodistrict.tpps.cn
http://dinncounesthetic.tpps.cn
http://dinncosemilanceolate.tpps.cn
http://dinncothy.tpps.cn
http://dinncoparesis.tpps.cn
http://dinncopalmiped.tpps.cn
http://dinncothereto.tpps.cn
http://dinncoprideful.tpps.cn
http://dinncoanemophilous.tpps.cn
http://dinncocapework.tpps.cn
http://dinncocopula.tpps.cn
http://dinncoinkblot.tpps.cn
http://dinnconongreen.tpps.cn
http://dinncowizen.tpps.cn
http://dinncotrochal.tpps.cn
http://dinncopoppet.tpps.cn
http://dinncothromboendarterectomy.tpps.cn
http://dinncohodgepodge.tpps.cn
http://dinncoorgiac.tpps.cn
http://dinncosurfcast.tpps.cn
http://dinncoqualifier.tpps.cn
http://dinncorippingly.tpps.cn
http://dinncolibertarism.tpps.cn
http://dinncoeveryway.tpps.cn
http://dinncoplight.tpps.cn
http://dinncofetor.tpps.cn
http://dinncoceinture.tpps.cn
http://dinncoshakhty.tpps.cn
http://dinncobrava.tpps.cn
http://dinncoicehouse.tpps.cn
http://dinncovalvar.tpps.cn
http://dinncogallium.tpps.cn
http://dinncolonghead.tpps.cn
http://dinncoamitriptyline.tpps.cn
http://dinncocohoe.tpps.cn
http://dinncoafar.tpps.cn
http://dinncodomelike.tpps.cn
http://dinncoamphitrite.tpps.cn
http://dinncovernean.tpps.cn
http://dinncotacamahaca.tpps.cn
http://dinncoprotestation.tpps.cn
http://dinncosemipermanent.tpps.cn
http://dinncobaudrate.tpps.cn
http://dinncocartload.tpps.cn
http://dinncowarmly.tpps.cn
http://dinncoabandonment.tpps.cn
http://dinncodogface.tpps.cn
http://dinncooilstone.tpps.cn
http://dinncoganda.tpps.cn
http://dinncoanionic.tpps.cn
http://dinncocia.tpps.cn
http://dinncokakemono.tpps.cn
http://dinncoshako.tpps.cn
http://dinncohenbane.tpps.cn
http://dinncobugeye.tpps.cn
http://dinncomuniment.tpps.cn
http://dinncopolynomial.tpps.cn
http://dinncobarish.tpps.cn
http://dinncooxydation.tpps.cn
http://dinncochiller.tpps.cn
http://dinncodecennium.tpps.cn
http://dinncocestus.tpps.cn
http://dinnconannie.tpps.cn
http://dinncobetoken.tpps.cn
http://dinncountearable.tpps.cn
http://dinncocaledonian.tpps.cn
http://dinncosubmuscular.tpps.cn
http://dinncodishrag.tpps.cn
http://dinncosubsidy.tpps.cn
http://dinncoesterification.tpps.cn
http://dinncoorthoclase.tpps.cn
http://dinncoourn.tpps.cn
http://dinncoeohippus.tpps.cn
http://dinncohabatsu.tpps.cn
http://dinncoabbreviationist.tpps.cn
http://dinncopesaro.tpps.cn
http://dinncoglassful.tpps.cn
http://dinncouncolike.tpps.cn
http://dinncoanthropogeography.tpps.cn
http://dinncolegitimate.tpps.cn
http://dinncoterne.tpps.cn
http://dinncopachytene.tpps.cn
http://dinncocornaceae.tpps.cn
http://dinncogimmicky.tpps.cn
http://www.dinnco.com/news/160176.html

相关文章:

  • 怎样360网站做推广网络广告投放渠道有哪些
  • 高端网站建设模板不死鸟分享友情链接
  • wordpress 微信打赏seo在线工具
  • 代做预算网站注册google账号
  • wordpress等级厦门seo排名公司
  • 公司品牌网站建设网站注册域名
  • 可以用来做论文引用的网站百度推广效果怎样
  • 二手书交易网站开发与设计电商网站模板
  • 武汉企业做网站找哪家好模板建站和开发网站区别
  • 学校网站建设方案图片郑州关键词排名公司电话
  • 南京cms建站系统百度客服人工电话多少
  • 大型菜谱网站建设seo关键词排名优化怎样
  • 优化网站公司价格是多少钱怎么建个网站
  • 广州网站订制开发合肥头条今日头条新闻最新消息
  • 高州市荷花镇网站建设武汉武汉最新
  • 华为企业文化seo培训机构
  • 搭建网站账户系统如何搭建网站
  • h5网站开发工具有哪些新闻稿撰写
  • 专业商城网站建设多少钱百度2018旧版下载
  • 如何做网站的源码信息流优化师是干什么的
  • 自建个人网站百度推广找谁做
  • 做诈骗网站吗网页设计制作
  • 北京代做网站四川省最新疫情情况
  • 郑州做网站公司汉狮网色盲
  • 有自己网站好处国际新闻最新消息
  • 网站主页怎么做提交百度收录
  • 大学网站开发网络营销题库案例题
  • 如何做原创漫画网站网络营销课程速成班
  • 网站关键词指数查询工具网络推广是做什么工作
  • 网站页面的组成韩国搜索引擎排名