使用可靠的I2C代码
2016-03-20 13:38
369 查看
现有的STM32的I2C代码,由于没有使用STM32官方推荐的DMA+I2C中断优先级最高的方式,总感觉用着不放心。想要修改,却又不知道如何改是更好地。于是想查找I2C驱动部分处理的好的代码,参照将现有I2C部分程序重构下。在查找了一些代码库文件后,比对了现有的I2C程序,发现EFM32的I2C库代码部分处理的很完备。使用的是硬件I2C+超时处理机制。而且超时处理也有适当的处理。有可能是EFM32的库代码出的时间较晚是2012.11月份的,写的比较完善。但是STM32却没有更新固件库,提高代码的安全性。
虽然现有的STM32固件库有超时处理,但是调用的函数是一个while(1)也即,如果出现了超时处理,就要进入死循环了。而EFM32的处理则要明显好得多。EFM32在进行超时处理,重新初始化了I2C,并且返回错误。从这一点看,STM32的参考代码只适合功能性实现,如果用于产品中,产品则会陷入不知觉的死机中,而且很难查找到。而EFM32的库代码用于产品代码中,则会更安全一些。
最后,对于在产品中出现的硬件操作代码,对于从设备的操作,一定要有超时处理。虽然一般情况下,很难出现什么问题,但是如果存在这样的概率,当批量后就会有一个死机的概率,虽然出现的概率很低,但是如果一个产品出现了,对于这个产品本身而言就是100%的不良品。而且,由于外界的影响,所有的产品都会有可能出现死机,这个问题很严重。虽然,可以通过外部看门狗来解决,使CPU自动重启。但是在多任务应用中,这样的处理并非简单。甚至有可能十分复杂。
最后,在底层中一定不要存在
[cpp] view
plain copy
<span style="font-size:18px;">while(condition)
{
;
}</span>
如果要用,也要加上超时处理:
[cpp] view
plain copy
<span style="font-size:18px;">while(condition)
{
if(timeout)
{
handle;
break;
}
}</span>
(当然,也有不得不用的时候,这样的机会很少)。
虽然现有的STM32固件库有超时处理,但是调用的函数是一个while(1)也即,如果出现了超时处理,就要进入死循环了。而EFM32的处理则要明显好得多。EFM32在进行超时处理,重新初始化了I2C,并且返回错误。从这一点看,STM32的参考代码只适合功能性实现,如果用于产品中,产品则会陷入不知觉的死机中,而且很难查找到。而EFM32的库代码用于产品代码中,则会更安全一些。
最后,对于在产品中出现的硬件操作代码,对于从设备的操作,一定要有超时处理。虽然一般情况下,很难出现什么问题,但是如果存在这样的概率,当批量后就会有一个死机的概率,虽然出现的概率很低,但是如果一个产品出现了,对于这个产品本身而言就是100%的不良品。而且,由于外界的影响,所有的产品都会有可能出现死机,这个问题很严重。虽然,可以通过外部看门狗来解决,使CPU自动重启。但是在多任务应用中,这样的处理并非简单。甚至有可能十分复杂。
最后,在底层中一定不要存在
[cpp] view
plain copy
<span style="font-size:18px;">while(condition)
{
;
}</span>
如果要用,也要加上超时处理:
[cpp] view
plain copy
<span style="font-size:18px;">while(condition)
{
if(timeout)
{
handle;
break;
}
}</span>
(当然,也有不得不用的时候,这样的机会很少)。
相关文章推荐
- Python进阶01 文件处理
- 贪心算法—移动办公室桌子,占用走廊问题(1000,problem A)
- FTP基础知识
- JAVA CAS单点登录之一:搭建CAS服务器
- 优化php程序,试试这几招。
- 【GOF23设计模式】--单例模式
- As a good Java programer
- ASP.NET5 REST API使用示例——基于云平台+云服务打造自己的在线翻译工具
- Java Executor并发框架(三)ThreadPoolExecutor 队列缓存策略
- Java调用ASP.NET的webservice故障排除
- Eclipse juno 中安装 JBoss Tools,集成Hibernate
- Python 基础 登陆小程序
- java 抽象类 抽象方法被调用 static 方法不能被复写
- python不是内部或外部命令
- java 认识异常
- Python Socket
- Python基础05 流程控制
- windows基础编程----第五篇(实现更为丰富的绘图)
- JAVA 集合
- Python基础04 运算