VxWorks常用的命令
1.与任务相关的命令
sp function,[arg1],...,[arg9]
-启动任务,最多接受9个参数,默认的优先级100、堆栈20000字节
period n,function,[arg1],...,[arg8]
-创建一个周期调用function的任务,周期为n秒,最多接受8个参数
repeat m,function,[arg1],...,[arg8]
-创建一个反复调用function的任务,调用次数为m,m=0时永久调用,最多也是8个参数
ts tidX        -挂起任务
tr tidX        -恢复挂起的任务
td tidX        -删除任务
i  tidX        -显示任务基本信息,参数为0时显示全部任务
ti tidX        -显示任务详细信息,包括寄存器、堆栈等
tt tidX        -显示任务的函数调用关系
checkStack tidX -显示任务堆栈使用的历史统计,参数为0时显示全部任务
[其中tidX可以为任务ID 也可以为任务名]
2、系统信息
lkup ["string"] -在系统符号表中查并列出含有"string"字符的函数及全局变量,有两个特殊参数:
                  0,给出符号表统计;""(空字符串),列出全部符号
lkAddr addr      -显示addr地址附近的符号表
l addr,[n]      -显示addr地址开始的n条指令的反汇编,n省略时默认为10条指令
h [n]            -n为0时列出最近执行的shell命令,默认20条;n非0时,设定shell记录的历史命令的数目
d [addr,[number],[width]]
                -显示addr地址开始的number个单元的内容,width定制每个单元的宽度,可以是1、2、4、8
m addr,[width]  -按width宽度修改addr地址的内容,width可以是1、2、4、8
memShow 1        -显示系统分区上空闲和已分配空间的总数等
printErrno value -打印系统定义的错误码的宏
3、与网络相关的命令
ifShow      ["ifname"]            - show info about network interfaces
inetstatShow                      - show all Internet protocol sockets
tcpstatShow                        - show statistics for TCP
udpstatShow                        - show statistics for UDP
ipstatShow                        - show statistics for IP
icmpstatShow                      - show statistics for ICMP
arpShow                            - show a list of known ARP entries
mbufShow                          - show network stack data pool statistics
netStackSysPoolShow                - show network stack system pool statistics
routeShow                          - display all IP routes (summary information)
mRouteShow                        - display all IP routes (verbose information)
routestatShow                      - display routing statistics
routeAdd    "destaddr","gateaddr" - add route to route table
routeDelete "destaddr","gateaddr" - delete route from route table
说明:上述大多数命令都可以在help、netHelp中查到
vxWorks命令规则:名词+动词,第二个单词开始大写
  序号
状态
命令
备注
1
BSP
c
改变配置
2
BSP
p
打印当前配置信息
3
BSP
@
开始加载内核
4
BSP
ctrl+x
重新启动
5
BSP
6
BSP
7
vxWorks
i
查看进程
8
vxWorks
ifShow
查看当前网络设置
9
vxWorks
devs
查看所有的设备
10
vxWorks
cd "/xxx/"
进入目录
11
vxWorks
cfIdeInit
每次上电后执行
12
vxWorks
cfFormat
新卡(或者是未格式化的卡)插入的时候执行,只需执行一次
13
vxWorks
ll
以详细模式查看当前目录下的文件
14
vxWorks
ls
以简单模式查看当前目录下的文件
15
vxWorks
version
查看编译时间
16
vxWorks
td xxx
终止xxx进程
17
vxWorks
help
帮助
18
vxWorks
tffsShow
查看tffs的相关信息
19
vxWorks
tffsDevFormat
格式化tffs文件系统
20
vxWorks
showTime
查看系统时间
21
vxWorks
usrTffsConfig(0,0,"/tffs0")
新增一个tffs格式的文件系统
22
vxWorks
pwd
查看当前操作所在的目录路径
23
vxWorks
ping "",10,0
ping地址,共计10次
24
vxWorks
pciDeviceShow
查看当前系统中的所有PCI设备
25
vxWorks
pciHeaderShow,0,xx
查看当前系统中的组号为0、地址号为xx的PCI设备
VxWorks任务追踪实例分析
VxWorks中如果稍有不慎,就可能导致task suspend,如果运气好,shell没有被挂起,则可以通过系统的一些命令追踪一下挂起的原因。其中用到的主要命令是i、tt、ti、d等。
首先从出错信息开始:
0xfc8125b8 (t_Lcd): memPartFree: invalid block 0xfdfc6f38 in partition 0xfe508894.
由于memPartFree了一个非法的内存块,导致了任务挂起,我们需要确定到底是哪条语句导致了这个异常的产生,可能是什么原因引起的。
首先,需要通过“i”命令察看任务状态:
-> i
NAME        ENTRY      TID    PRI  STATUS      PC      SP    ERRNO  DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
tExcTask  excTask      fdffec80  0 PEND      fe3c5f50 fdffeb60  3006b    0
tLogTask  logTask      fdffc298  0 PEND      fe3c5f50 fdffc188      0    0
tShell    shell        fdf5fa48  1 READY      fe1f3afc fdf5f628      0    0
……
t_Lcd      fe392a30    fc8125b8 100 SUSPEND    fe1f24b0 fc8120b8  d0003    0
……
可以看到任务t_Lcd的状态为SUSPEND,即被挂起的状态。其他各项的含义都比较清楚,ENTRY是任务的入口函数,如果没有symbol,则直接显示地址,TID是任务的ID号,一般用任务的栈底地址表示,PC是当前的指令位置,SP是当前栈顶位置。
然后通过”tt”来追溯函数调用过程:
-> tt "t_Lcd"
汇编指令汇总fe3c14f4 vxTaskEntry    +68 : fe392a30 ()
fe392b48 initLcdComponent+2e8: fe392bdc ()
fe392bec initLcdComponent+38c: fe392bfc ()
fe39333c initLcdComponent+adc: lcdShowPassWord ()
fe398590 lcdShowPassWord+84 : saveModifiedSetting ()
fe3a3790 saveModifiedSetting+220: saveSettingValue (1)
fe1fd6d0 saveSettingValue+148: fe1fc428 (0, 5, ffffffff)
fe1fc888 getDeviceSettingValue+64c: fclose ()
fe1aab48 fclose        +ec : free ()
fe1bb7d4 free          +1c : memPartFree ()
fe1bb2dc memPartFree    +148: taskSuspend ()
我们可以了解到函数的调用过程,vxTaskEntry()?->fe392a30()->fe392bdc ()->fe392bfc ()->lcdShowPassWord ()->saveModifiedSetting ()->saveSettingValue (1)->fe1fc428 (0, 5, ffffffff)->fclose ()->free ()->memPartFree ()->taskSuspend ()。
其他相关信息:
第一栏是发生跳转(即函数调用)后的返回地址,稍后会作详细解释,
第二栏是离返回地址最近的symbol和偏移量,一般情况下会是发 起调用的那个函数的名称,除非该函数是内部函数,系统中没有symbol,
第三栏是被调用的函数。
再来查看一下t_Lcd任务的栈里的内容,从前面的任务信息里已经得知当前栈顶位置为fc8120b8,通过“d”命令显示该地址的内容。
-> d 0xfc8120b0
fc8120b0:  fc81 25b8 fc81 25b8 fc81 20c8 fe1f 24b0  *..%...%... ...$.*
fc8120c0:  fe50 8894 fdfc 6f30 fc81 20e8 fe1b b2dc  *.P....o0.. .....*
fc8120d0:  fdf2 6b08 0000 0100 0000 000c 0000 0000  *..k.............*
fc8120e0:  0000 0000 fdf1 ed80 fc81 20f8 fe1b b7d4  *.......... .....*
fc8120f0:  fd9a 3538 fdf1 ed80 fc81 2108 fe1a ab48  *..58......!....H*
fc812100:  fd9a 3538 fc81 2108 fc81 2238 fe1f c888  *..58..!..."8....*

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。