世俱杯 2025

登录 免费注册 世俱杯 2025 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

UCOS的2个教训

作者:wandering 栏目:嵌入式系统
UCOS的2个教训

  最近一个项目用USOSii+LPC2xxx做的,第一次用UCOSii,开始异常顺利,想还是挺简单的,本以为就这样结束了,项目快结尾时,加了一个与无线传数据的功能,发觉总会死机.看程序也看不出来,串口的调试信息也查不出来(没有仿真器,为公司省银子,呵呵),最后发觉一个300 BYTE数组引起的,一查才发觉任务堆栈溢出了,折腾我好半天;

   项目很快结束了,当时要出货前,测试反映一个数据乱码的问题,是偶尔才发生,我头都大了!出去溜达了几圈(没人管,呵呵,一直喜欢公司这种比较自由的管理方式).初步判定是存在FLASH.html">FLASH中的数据被改写了,原因呢?发现规律是当有优先级高的2个任务运行时出错几率很大,(两个任务在后台运行)而着两个任务也对FLASH.html">FLASH有写操作,更致命的是我的读写FLASH都是把数据放到一个很大的全局BUFF里(这就是所谓的不可重入函数),导致读出的数据有可能被高任务写的数据代替,那么显示的数据就乱了,如果用户选择保存,就写入了错误的数据.找到问题就好办了,把BUFF改为在任务堆栈上分配,从这一个,再也没人烦我了!



2楼: >>参与讨论
001mabin
什么项目啊,说来听听
 
3楼: >>参与讨论
high
全局数据视为一种资源。
对资源访问应该有互斥保护。

调试期就应该统计出堆栈实际需要,ucos自带了统计任务,可以算出堆栈深度。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
UCOSII怎么可以在内存里运行?
请问在哪儿能找到39vf160的数据手册啊?
谁有USOSII在44B0下的版本?
求助:关于学习嵌入式!
怎样在cygwin下建Qt开发环境?


Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号