uc-OS III 任务优先级不当引发的困扰

发布者:黑白之间最新更新时间:2016-09-02 来源: eefocus关键字:uc-OS  III  任务优先级 手机看文章 扫描二维码
随时随地手机看文章
前言

为了使STM32的生态系统里OS多元化,stm32系列不仅支持FreeRTOS,也支持uc-OSIII,提供给客户更多选择,满足客户日益增长的需求。
这里使用stm32f429-eval平台,基于stm32cubef4中的Demostration例程,替换其中的FreeRTOS。例程中uc-OSIII系统里涉及的任务及其优先级配置如下表:

1

Demostration 是一个综合示例,包含了尽可能多的中间件,譬如GUI framework, STemwin,USB stack, FatFS, OS(FreeRTOS)等等。鉴于芯片内存大小限制,在stm32f429-eval 平台上,tcp/ipstack lwIP 并未集成进去。

Case 1 优先级设置不当引发ANR(application not response)

1.1 问题描述
在应用中,有一个videoplayer 和audioplayer 模块,其中有一个功能,从文件系统中向播放器添加文件、文件夹,这在emWinframework 中,通过控件CHOOSEFILE_Create实现,它是一个基于窗口的模式对话框。
然而,只要点击“+”按钮或者文件夹按钮后,弹出一个选择文件的对话框,再点击屏幕任何地方,系统都没有任何反应,界面也一直停留在这个对话框。

1.2 问题分析与定位
在uc-OSIII 中,触摸屏事件是通过软定时器实现的,软件定时器是通过一个任务实现的,而当定时器任务的优先级比GUI任务低时,当GUI任务处于就绪状态时,定时器任务得不到任何调度,那么任何触摸事件的更新消息无法产生,也无法发送给GUI任务,而GUI任务在等待触摸事件(GUI任务与触摸模块是通过信号量来同步的)。这样就出现了deadlock,一方(消费者)死等某个事件的产生,而另外一方(生产者)无法产生这个事件,系统就出现了无响应的现象。

1.3 问题解决方案
既然uc-OSIII 是抢占式调度模式(也支持round-robbin调度),那么将定时器任务优先级调整比GUI任务优先级高一级即可,问题予以解决。

Case 2 优先级设置不当引发调试模式下,程序崩溃

2.1 问题描述:
使用Keil5.20 版本编译、调试、下载程序时,如果程序处于运行模式,一切正常;然而如果置于调试模式,则程序100%crash。这种情形十分罕见,一般情况下是,运行模式往往程序会crash,调试模式下,程序可以正常运行。使用调试模式来troubleshootbug 的。

2.2 问题分析&解决
幸运的是,该问题100%复现。于是竭尽全力去找寻上一次对程序的修改导致了此问题,一步一步撤销修改,恢复成代码的初始状态。经过几番努力,力争追根溯源,想查明是哪一次的修改导致了问题。结果,依然一无所获。

于是,开始考虑从异常处理程序中着手,找到触发异常的那条指令,那个函数,那个任务。这里主要参考了ARM提供的应用笔记《apnt209.pdf》。调试时,通过FaultReport 知悉,此异常为busfault,而且BFARVALID和PRECISERR都置位了。按照ARM的指南,BFARVALID 对应的地址寄存器存储的是触发busfault 的指令地址,不过这次失效了,里面的地址不在ROM地址范围内。

本想咨询一下ARM的技术支持,如何解决这一问题。因为个人觉得,这个问题跟调试器有关,怀疑是自己对于IDE的某些参数配置不当才引起的。苦于没有任何间接的、直接的来自ARM官方的关于KeilMDK 技术支持。未遂。

心痛还得心药治,解铃还须系铃人。考虑系统存在诸多任务,于是考虑通过WBS方式,一一注释掉这些任务,看看究竟是哪个任务引起的。这样做的话,工作量比较大。退而求其次,既然调试时程序每次都crash,而且每次crash时,内核的寄存器参数的值都是一样的(幸运的是,该异常不是随机产生的),联想到Linux内核里有一个当前任务指针currenttask pointer,而uc-OSIII 中也有类似的数据结构(其他OS如FreeRTOS也有类似数据结构),即OSTCBCurPtr,将其置于watch窗口,发现其指向OSStatTaskTCB,于是在stat 任务相应
的任务处理函数设置断点,单步执行,这样居然程序可以正常运行!

进一步发现,在系统启动过程中,stat任务会统计每个任务占用CPU时间,比较耗费CPU,导致GUI 任务不能及时执行,从而诱发总线异常(busfault)。于是尝试将stat任务优先级调低,重新编译、下载、调试,一切OK!运行模式也OK.

OMG,原来是stat 任务优先级设置过高导致了bus fault !还是任务优先级安排不当导致的问题。

关键字:uc-OS  III  任务优先级 引用地址:uc-OS III 任务优先级不当引发的困扰

上一篇:KEIL环境下如何让代码在 RAM中运行
下一篇:基于STM32 HID例程生成不小于64字节传输的移植过程

推荐阅读最新更新时间:2024-03-16 15:07

TI壮大FPD-Link III汽车级串行器解串器产品阵营
    日前,德州仪器(TI)宣布推出业界功能最丰富的芯片组,进一步壮大其FPD-Link III汽车级串行器解串器产品阵营。该DS90UH927Q-Q1串行器与DS90UH928Q-Q1解串器可为汽车中央信息显示及后排座位的LCD触摸屏面板带来无压缩、高清数字音视频。DS90UH928Q-Q1是业界唯一一款通过LVDS连接,实现汽车电缆均衡、24位色彩抖动与白平衡的解串器。与同类竞争解决方案相比,这些特性可帮助LCD面板实现最高性能、最低成本以及最低电磁干扰(EMI)优势。     该芯片组支持高带宽数字内容保护(HDCP),并支持与LVDS输入源及显示屏的直接连接,包括OpenLDI (LVDS数字接口) 标准。这不但可将
[汽车电子]
GALAXY S III采用展讯TD基带芯片
    上海2012年6月19日电 /美通社亚洲/ 展讯通信有限公司展讯通信今日宣布其TD-SCDMA基带芯片-SC8803G与RF收发器-SR3200被三星选定,用于中国移动定制款最新顶级TD-SCDMA智能手机GALAXY S III (GT-I9308)。   “对于支持三星在中国移动的顶级智能手机市场持续发力,我们感到非常荣幸,”展讯通信董事长兼首席执行官李力游博士表示,“三星在世界一流的智能手机系列领域已经取得了全球性的成功,而三星GALAXY S III高端智能手机再次提升用户体验。此次,三星选择我们一流的基带芯片,再次验证展讯在TD-SCDMA市场所取得的领导地位。”
[手机便携]
四核双UI启动 三星Galaxy S III再曝光
        最近三星Galaxy S III接连曝光,两张疑似官方效果图和一张拍照样张都已呈现在我们面前,使得我们难辨真假。现在,国外媒体又曝光了一张号称是Galaxy S III的真机图,并且还有一位自称是三星高管的人士透露了一些重要的配置信息。据国外媒体报道,本次曝光的真机图出自三星一名高管之手,从照片中我们看到,该机正面并没有实体按键,与第一次曝光的官方照在外形上较为相似。     此外我们看到该机4.7英寸的Super AMOLED Plus屏幕占据了整个手机正面的大部分面积,并且该机还采用了窄边的设计,整机仅厚8mm。     同时这位高管还称Galaxy S III除了运行着Android 4.0
[手机便携]
Altera发布新的Cyclone III LS FPGA
2009年6月30号,北京——继续扩大在低功耗解决方案上的领先优势,Altera公司 (NASDAQ: ALTR)今天发布了具有安全特性的低功耗新系列FPGA。新的Altera® Cyclone® III LS FPGA在单位面积电路板上具有密度最大的逻辑、存储器和DSP资源。这些器件是功耗最低的FPGA,200K逻辑单元(LE)的静态功耗小于0.25W。现在已经开始发售的Cyclone III LS FPGA面向所有市场领域中对功耗和电路板面积非常敏感的应用。 Cyclone III LS FPGA的安全特性包括全面的信息安全保障设计包,支持防篡改、设计安全和设计分离功能。为保护非常敏感的信息,Cyclone
[嵌入式]
Altera发布新的Cyclone <font color='red'>III</font> LS FPGA
μC/OS-III在Cortex-M3处理器上的移植
引言 μC/OS-III是一款基于优先级调度的抢占式实时内核,Micrium公司于2011年8月公开了μC/OS-III的源码,其源码遵循ANSIC标准,因而具有良好的移植性,相信其将会被移植到越来越多的处理器体系上。本文主要完成基于Cortex-M3处理器的μC/OS-III移植,通过本次移植,加深对嵌入式操作系统原理的理解。此外,在μC/OS-III移植成功的基础上进行嵌入式应用程序开发,可以把主要精力集中到应用程序上,而硬件资源交由μC/OS-III管理,从而使得嵌入式应用程序更易开发和维护,在嵌入式软硬件结构变得越来越复杂的今天具有现实意义。 1 μC/OS-III和Cortex-M3特点 相对以前的版本,μC/O
[单片机]
μC/OS-<font color='red'>III</font>在Cortex-M3处理器上的移植
Altium为NanoBoard开发板新增Cyclone III器件
    继2009年 9 月发布基于 NanoBoard 3000 的快速原型设计全新方案后,Altium日前又宣布推出采用 Altera Cyclone III FPGA 的最新 NanoBoard 3000,从而进一步扩展了这一理念。     新的开发板为电子设计人员继续提供相同的软硬件以及 NanoBoard 3000 可以直接使用的免专利费 IP,所不同的是,在其内核中提供了具有 Altera 高性价比 Cyclone III FPGA 电源。     电子设计人员采用 NanoBoard 3000,可获得高级 FPGA 设计方案设计与部署所需的所有要素。同时,NanoBoard 3000 配套提供了完整的软硬件,
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved