1, VxWorks的特点:
幻灯片 4 .O {font-size:149%;} <!--.sld {left:0px !important; width:6.0in !important; height:4.5in !important; font-size:103% !important;} -->
■
All functions exist in the same "space".
►
Name clashes may appear between different modules (libraries).
►
Use unique names (with prefix) for global functions!
●
Wrong:
config
,
test
,
read_bi
●
Right:
drvXy
Config
,
foo
Test
,
devAbc_
read_bi
►
Or make functions
static
.
■
vxWorks has no
main
function.
■
Every function (including the shell) can call any other function.
►
You don’t start
programs
from the shell, you call
functions
.
►
When name clash happens, you might call the wrong function.
幻灯片 5 .O {font-size:149%;} <!--.sld {left:0px !important; width:6.0in !important; height:4.5in !important; font-size:103% !important;} -->
■
Ending a thread does not clean up system resources.
2, VxWorks中不同模块下相同名字的全局变量仍占用同一块内存;
static可让变量仅在一个源文件中生效;
可能的内存问题:
幻灯片 6 .O {font-size:149%;} <!--.sld {left:0px !important; width:6.0in !important; height:4.5in !important; font-size:103% !important;} -->
■
Pro: Functions and threads can easily
…
►
exchange large amounts of data by reference (pointers).
►
access any hardware register (e.g. VME bus).
■
Con: Functions and threads can easily
…
►
overrun allocated memory or stack size (esp. with arrays)
►
overwrite system tables. (e.g. interrupt handler table at
NULL
)
►
overwrite program code.
►
modify global variables of other modules (e.g. drivers).
3, 入门指导:
幻灯片 9 .O {font-size:149%;} <!--.sld {left:0px !important; width:6.0in !important; height:4.5in !important; font-size:103% !important;} -->
■ Online help: http://vxworks.web.psi.ch
► Important for beginners:
VxWorks Programmer's Guide, Chapter 2
● All about tasks, semaphores, watchdog timers, interrupts
► Always helpful:
vxWorks Reference Manual
● All vxWorks system functions
■ Run-time help: Type help on the vxWorks shell.
4,VxWorks shell使用注意:
1)最多只能传10个参数;
2)PPC结构中float和double无效;
3)可以直接使用shell创建全局变量;
5,写程序应注意以下错误处理:
■
Error checking is the key to a stable system.
►
Stability is limited by the weakest point!
■
Check arguments to API functions (esp. shell functions)
►
Never trust a user! Not even yourself.
■
Always check pointer arguments for validity.
►
Writing to
NULL
overwrites the interrupt handler table!
■
Check results of system functions (
malloc
,
fopen
,
…
)
►
System functions may fail and return
NULL
or
ERROR
.
►
Using these values unchecked may crash the system much later.
■
Check for "impossible" values (e.g. in
case
constructs
幻灯片 17 .O {font-size:149%;} <!--.sld {left:0px !important; width:6.0in !important; height:4.5in !important; font-size:103% !important;} -->