硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4067|回复: 2
收起左侧

[FreeRTOS] Free超临界段代码问题

[复制链接]

2

主题

11

回帖

34

积分

新手上路

积分
34
发表于 2016-10-22 18:43:37 | 显示全部楼层 |阅读模式
各位大神大家好,最近在调试一个项目,使用的是FreeRtos,现在遇到点问题,如下:
       项目中需要一个写EEPROM的步骤,众所周知在写EEPROM的时候需要关掉总中断,写完之后在打开总中断。我就是按照这个步骤操作的:
       __set_PRIMASK(1) //关
      写EEPROM
      __set_PRIMASK(0) //开
     现在问题来了。。。。。
     我写完EEPROM打开总中断后,程序跳到中断处理函数中取出了刚才中断被打断时USART->DR里边的数据,取完后,又响应了一次串口中断,导致该数据被接收了两次.......
     好纠结啊,网上查了一天也没发现遇到和我一样问题的。是我太菜了吗,实在令人费解....[s:139][s:139][s:139][s:139][s:139][s:139],求大神解惑。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
发表于 2016-10-23 09:35:02 | 显示全部楼层
1. I2C是的时序要求不严格,如果你是硬件I2C,完全不用开关中断,如果你是软件模拟也没用问题的,做好容错就行了,比我们的代码是软件模拟的,没用做过开关中断。

2. 你的开关中断函数调用错了,在FreeRTOS里面要使用FreeRTOS自己的开关中断函数,可以看我们的教程第15章
回复

使用道具 举报

2

主题

11

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2016-10-23 15:12:22 | 显示全部楼层
谢谢!使用的软件模拟 I2C 。我再仔细研究一下FreeRtos的开关总中断。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 10:52 , Processed in 0.150792 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表