实时嵌入式开发中遇到的几个非典型问题

使用ucosii近两年,最近遇到几个非技术性问题,被折腾了一个多星期。

在此觉得有必要对这两年遇到的坑作个总结, 也是对后来者的一个有益提醒。 

第一次写blog,欢迎大家提出意见。 


--背景为stm32f407芯片、工业环境使用、ucosii操作系统、fat操作系统。 



1、寄存器操作,while死循环。

这个没什么好说的,特别对板级外扩芯片,如FLASH、外扩SD卡、外部给RTC供电的晶振,这类在硬件有干扰或物理损坏下,导致初始化失败,表现为死机。

最终会造成严重后果或会给人印象很差,这类属于低级错误,刚入行时犯过几次。


2、外设操作时间过长,影响其它任务中外设的初始化,致使初始化失败。

这个是近期犯的错误。 在一个任务里读外扩FLASH时, 部分情况下会多次操作, 导致在另一个低优先级任务for(;;)之前的usb硬件初始化被打断,后续该usb一直无法正常运行,随机上电失效。

a、最好不要在新建任务时初始化硬件,硬件要么在start任务,要么在所有任务之前,尽量全部完成; 当前重要硬件操作, 必须加相应保护; 

b、板级外设操作,可能时间会较长。 期间尽量作delay让出CPU权限,避免其它低优先级任务个别需较长时间的操作失效; 

c、如果可能, 对外设,尽量都用DMA操作,不要使用查询或中断等长期占用CPU行为。 以提高效率和减少对外影响; 

d、在多任务设计时,要考虑到任务里操作可能出现的占用时间过长问题。 具本视情况而定。 


3、DMA等硬件FIFO操作,非BUF对齐。

在操作SDIO时,出现使用双字FIFO时,对RAM里定义的int8\int16类型,出现因地址对齐,而丢数据情况。 

此处需注意。 类型还有结构体变量,禁用指针来操作。 


4、操作系统,触发执行任务不完全。

对转存等类型操作, 最后一帧和最初一帧,应作详细检查,防止遗漏 。 





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值