引言
在作为***863计划子项目挖掘机智能化控制系统的开发中,出现了智能化挖掘机轨迹控制系统不按照预先设定好的轨迹运行和嵌入式实时多任务操作系统μC/OS-Ⅱ调度紊乱等失控问题。该智能化系统中采用了μC/OS-Ⅱ,通过位移传感器实时采集挖掘机的铲斗、斗杆和动臂等3路角度信号,通过算***划路径驱动液压比例阀实现平行推进、铲斗挖掘等典型作业。本文主要针对课题遇到的问题,***阐述μC/OS-Ⅱ在芯片内Flash存储器运行时关键问题的分析与解决办法。
1μC/OS-Ⅱ在Flash存储器中的运行
1.1 μC/OS-Ⅱ的特点与功能
μC/OS-Ⅱ是一个实时多任务的嵌入式操作系统,它采用可剥夺型内核。所有的任务都有优先级,多任务之间优先级高的可以中断执行中的低优先级任务而优先执行。
它的特点主要有:公开源代码、可移植性、可固化、可裁减、支持多任务、具有可确定性等。μC/OS-Ⅱ是基于优先级抢占式的实时多任务操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列)和内存管理等功能。
1.2关键问题
在完成了智能控制软件后,就是将之嵌入到μC/OS-Ⅱ系统中。遇到的主要问题是移植好的μC/OS-Ⅱ源代码在闻亭的目标板上在线仿真时,把.out文件***到RAM中能正常执行,但是用CCS烧写到Flash存储器中就不能正常执行,出现智能化挖掘机轨迹控制系统不按照预先设定好的轨迹运行和μC/OS-Ⅱ实时多任务调度紊乱等失控问题,尤其是在课题的后期验收阶段问题尤为棘手。
1.3原因分析
程序固化的关键问题是如何在程序存储器中分配存储空间给常量和用c***t关键字定义的静态、全局变量。经过仔细研究,发现与TI的C编译器功能有关。CCS的编译器按照标准C,没有对Flash ROM中常数数据进行直接访问的功能。所以必须让c***t段的常量数据在RAM中。
实现这一条件的方法有3种:
a)方法1:解决μC/OS-Ⅱ在Flash中运行的方法,采用去除c***t关键字,在程序中赋初值使用,并且需要在.cmd文件中将.cinit段分配到程序区Flash存储空间,然后在编译器的编译选项中选中“-C”,即ROM初始化(C编译器默认就是这样的)。
b)方法2:不对定义作修改,.c***t段保存在Flash存储器中,数据不向数据存储器移动,程序运行时直接在程序存储空间中访问这些量。由于c语言缺乏访问程序区数据的有效手段,因此这些语句只能使用汇编语言编写。由于在每一处访问这些常量时都必须使用这些语句,因此这样编写程序改动量较大。
c)方法3:不需要修改常量定义,也不必编写专门的程序,主要的工作是修改.cmd文件并对工程中使用的库文件作简单的修改,修改工作量小而且集中,极大地方便了程序的编写。较之前两种方法,这种方法运用起来要方便得多。
2关键问题的解决与实现
以下分别介绍方法1和方法3的具体实现。
2.1方法1
解决μC/OS-Ⅱ在Flash存储器中运行的方法,即去除c***t关键字,在程序中赋初值使用,以μC/OS-Ⅱ的更改为例:
2.1.1问题的发现
μC/OS-Ⅱ的程序烧写到Flash中的问题,刚开始怀疑是分配存储器的cmd文件有问题,然后相关的又想到程序的大小问题,特别是在咨询闻亭的技术人员告知大于1 kB的程序要分开烧后,甚至怀疑闻亭的仿真器和开发板。后来实验使用合众达的板子是同样的效果,并且发现不带μC/OS的大小程序都能正常执行,基本排除了程序大小的问题以及硬件问题。后来通过对μC/OS系统任务调度前加LED函数,发现:直到多任务调度前都能正常执行,开始多任务调度后就出了问题。到这里确定问题出在μC/OS-Ⅱ上,但是μC/OS-Ⅱ的移植是其他人员做的,其他本身没有做过严格测试,也没有烧到Flash存储器中运行过,对整个课题产生致命的影响。***后课题组分析了程序在Flash存储器中运行与在RAM中运行的本质区别,提出一个重要的建议:可能有系统需要的常量定义在扩展RAM区了,当掉电后,RAM区的内容没有了,常量也就没有了,影响了系统的运行。
通过查看工程的cmd文件和编译输出的map文件,发现确实有系统内核的常量放在8000h以后的扩展RAM区。见下面map文件引用:
程序
然后在OS_CORE.C中找到了常量的位置,分别是掩码表:INT8U c***t O***apTbl[]和任务优先级判定表:INT8U c***t OSUnMapTbl[]
BAUMER ES 34AP5B *USED*
PPC SCANNER INTERFACE PB052097 *USED*
GUARDIAN ELECTRIC A421-064142-01 *USED*
PARKER 01.38 T HC 02 4.000 *USED*
RED LION CONTROLS 4610120 ROTARY ENCODER *NEW OUT OF A ...
FURNAS 14BF32AA *USED*
ALLEN BRADLEY 100-A09NJ3 SER.B WITH 193-BSB22B 24V *USE...
HUMPHREY AIR VALVE 062E1-3-10-21-3?6 *NEW IN A BOX*
GENERAL ELECTRIC GE 420 P7 480VAC RECEPT***E & PLUG *...
ALLEN BRADLEY 802M-XJ9NF SERIES B *USED*
ALLEN BRADLEY 802T-HP SER.F LIMIT SWITCH *USED*
***C CH***32-130-K59?WL PNEUMATIC CYLINDER *USED*
***C VQ***401-5 DOUBLE SOLENOID VALVE PLUG IN *USED*
MAC VALVE INC. 6321D-211-PM-11?1DA SOLENOID VALVE *USED*
DWYER 1950P-2-2F EXPLOSION PROOF PRESSURE SWITCH *USED*
LOT OF 2 N109C 220/240/60 COIL *USED*
VICKERS SV3-16-0-0-115A?P VALVE 115V *USED*
LENZE EMB9341-E *USED*
FANUC A20B-0009-0531 *USED*
BBC 05-MA-22 SPEED REGULAT *USED*
TRI-TRONICS UCD-AT2 PROXIMITY ONE-SHOT TIMER
DWYER 1950-0-2F *FACTORY SEALED*
M-SYSTEMS BVS-6 60V SIGNAL TRAN***ITTER *NEW IN A BOX*
LOT OF 4 PROVISUR 19785010000 TENSION SPRING SET *NEW O...
SQUARE D SY/MAX 8005-DN-116 *USED*
LOT OF 16 HOFFMAN F44GUC U-CONNECTOR *NEW IN A BOX*
ALLENAIR EA-5-120/60 COIL *USED*
SQUARE D 8501-L0-20 (CRACK) 120V *USED*
WOODHEAD 5 PIN CONNECTOR 105000A03F060 *USED*
GE 9TF6140 *USED*
HERRMANNI2 DB 40/50040 *USED*
SICK 2009317 *USED*
I*** 1286-1-A *USED*
M1346 *USED*
ATHENA 1000 *USED*
LOWELL *USED*
913800 314 24V *USED*
ALLEN BRADLEY 595-BL SERIES B *USED*
ALLEN BRADLEY 595-BL SERIES B *USED*
FLUID PRODUCTS CO. 12-24-7 *USED*
EFECTOR IF5721 *USED*
GE C60C *USED*
LOT OF 3 SPECTROL MOD 830 *USED*
CTG27378 *USED*
STOCKHAM 1 1/2" 1258 200WP *USED*
ALLEN BRADLEY 709-AOD SERIES K *USED *
CA-101 110V *USED*
PNEUMATIC PRODUCTS 1209748 *USED*
DAYTON 1A331 *USED*
P & P INDUSTRIES, INC. S4-100A-24 *USED*
WESTINGHOUSE CIRCUIT BREAKER FB3020 *USED*
LOT OF 4 V8935X *USED*
LFE 40 *USED*
PC 10-30 *USED
3764 6236 *USED*
CAT 6V-6129 *USED*
PHD 106 88-2-12 *USED*
COOPER 5000110-5 *USED*
ACE MCS-1401-0 *USED*
ARROW F553F IP *USED*
CHROMALOX 59T/66T3M *USED*
920920 *USED*
DAYTON 5X823 *USED*
CRAMER 10078 *USED*
CRAMER 10055 *USED*
LOT OF 2 SERIAL MCV-220 *USED*
LOT OF 2 503013600 *USED*
RJ PM11140A *USED*
3001 107 *USED*
GENUINE STERNS 634460609 COIL 460VAC 60HZ *USED*
HONEYWELL 30362481-001 *USED*
IDEC MCM23D-A20 *USED*
CUTLER-HAMMER D26MPF *USED*
GRACE SLCPP-N12 *USED*
DIOTEC DB3506 *USED*
2709-1 PEDAL *USED*
23244 *USED*
FERRAZ SHWAMUT US2211I *USED*
FMC 61 600061 *USED*
WINTER'S G175 *USED*
ACME PL-112704 *USED*
DAYTON 5Z536 *USED*
10000AFC *USED*
MAGNETEK F-46X *USED*
CUSTOM INDUSTRIAL CONTROLS, INC. TML 3 *USED*
CLARK TB130-4 *USED*
PHD ***L1X11/2-P *USED*
596B3089-1 *USED*
LOT OF 2 SIEMENS 5SN9 *USED*
GENERAL ELECTRIC 4JA2011MX131 *USED*
GENERAL ELECTRIC 22D1354 *USED*
GE SEFR1 *USED*
SICK LBSTA32900 *USED*
110-1-3 *USED*
SENSOR 120-00019-00 *USED*
I*** 1228-1-A-3-COP3 *USED*
NCC Q1T-00060-341 *USED*
ELECTRO 55141 *USED*
PHD 53626-1 *USED*
BOURNES 3400S-1-501 *USED*
WHITE RODGERS S84A-410 *USED*
SCHRACK CADB 14 A 10/220 *USED*
CAPP/USA 289338 *USED*
D-511/512 *USED*
SYLVANIA TM 110-120V *USED*
EAGLE SIGNAL HD32A623 *USED*
ALLIANCE MFG X-199884 220V *USED*
LOT OF 5 PM120933-T4 *USED*
LOT OF 2 VALENITE 0190-7524-6 *USED*
EAO 704.950.0 *USED*
PARKER BFGC05 *USED*
HONEYWELL LSZ1P *USED*
SYLVANIA 734G *USED*
TURCK WS 4.41T-2 *USED*
S&S DE 1-11 *USED*
RKT-LED F 4-07/10M *USED*