在项目中需要适配vxWorks,自己总结的遇到的问题与解决方法,欢迎大家交流vxWorks使用心得。
Q:
如何显示板卡CPU、DDR等信息?
A:
coreShow
Q:
如何显示vxWorks Image版本号?
A:
version
Q:
与任务相关的命令
A:
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 也可以为任务名]
Q:
与调试系统相关的指令
A:
lkup ["string"] -在系统符号表中查找并列出含有"string"字符的函数及全局变量,有两个特殊参数:
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 -打印系统定义的错误码的宏
Q:
vxWorks引导后的shell型命令,首先可以使用help查看所有指令来学习
A:
Q:
如何启动rtp程序?
A:
1).命令行启动rtpsp /ata0a/rtptest.vxe
2).应用程序里面启动
constchar*argv[]={“/ata0a/测试.vxe“,NULL}
rtpSpawn(argv[0],argv,NULL,100,0x10000,0,0)
Q:
环境变量
A:
使用 shConfig 命令修改环境变量:
shConfig(char *config) -参数为NULL时,显示当前Shell的配置参数,否则设置其参数
SH_GET_TASK_IO
为调用函数设置I/O重定向。ON:重定向到WindSh;OFF:I/O显示到目标机控制台。
LD_PATH
LD_SEND_MODULES
设置load模式。
以下3个用不到
LD_CALL_XTORS
LD_COMMON_MATCH_ALL
DSM_HEX_MOD
Q:
显示任务切换调用例程列表
A:
taskSwitchHookShow
Q:
显示一个任务的调用状况,解析堆栈
A:
Q:
DKM模块的加卸载指令
A:
ld < test.out 加载test.out模块到系统
unld id 卸载模块
Q:
显示系统中所有加载的模块
A:
moduleShow
Q:
修改bootrom启动参数
A:
Q:
显示POSIX消息队列的信息
A:
mqPxShow
Q:
显示POSIX信号量的信息
A:
SemPxShow
Q:
显示信号量的信息
A:
SemShow
Q:
显示队列的使用状况
A:
msgQShow
Q:
显示host列表
A:
hostShow
Q:
显示ip信息
A:
ipstatShow
Q:
显示路由信息
A:
routestatShow
Q:
显示tcp,udp信息
A:
tcpstatShow,udpstatShow
Q :
显示连接信息
A:
inetstatShow
Q:
显示ftp信息
A:
tftpInfoShow
Q:
文件操作
A:
cd
改变工作目录
ls
列出工作目录下的文件
pwd
显示当前工作目录
copy
拷贝文件
copy “host:cnset.cfg”“/HDisk/cnset.cfg”
remove
删除文件
remove “/HDisk/trace/error.log”
rename
更改文件名称
Q:
显示历史shell指令
A:
shellHistory
Q:
释放shell内动态分配的字符指针。参数为0,则打印当前所有字符指针;参数为-1,则释放所有指针
不过在shell中直接声明的字符指针,应该用free()来释放
Q:
打印指定RTP中的文件描述符?
A:
iosRtpFdShow
Q:
打印IO流中fp的信息
A:
stdioShow
Q:
打印dosFs volume configuration
A:
dosFsShow
Q:
网络常见的错误码
A:
Q:
vxWorks 网络抓包
A:
命令行切换到C模式,然后输入pcap命令即可实现捕获指定网口的网络数据
Q:
workbench怎么将生成的文件自动拷贝对应的目录
A:
1.写.bat脚本,右键运行
2.添加到POST_BUILD_RULE
Q:
如何在shell切换到其它目录后回到FTP镜像目录
A:
> cd "host:"
Q:
BOOT命令
A:
BOOT命令,启动时使用,用于查看和修改启动参数等操作。
p,打印配置
c, 修改配置
?, 帮助信息
@,加载内核
Ctrl+X,重新启动
Q:
列举PCI设备
A:
PciDeviceShow
Q:
系统里面修改驱动参数
A:
bootChange
Q:
vxWorks cache一致性问题,可使用如下函数解决
A:
实际flush()/invalidate()函数有如下两组,功能相同稍有区别:
组1:CACHE_DMA_FLUSH()函数和CACHE_DMA_INVALIDATE()函数
组2:cache Flush()函数和cacheInvalidate()函数
Q:
在vxworks6.x下添加一个新的驱动 一般需要添加6个文件 分别是
A:
target/src/hwif/xxx 下
xxx.c 和 xxx.mk --- 源文件和makefile文件
target/src/hwif/h/xxx 下
xxx.h -- 头文件
target/config/comps/vxworks下
xxx.cdf -- cdf文件用于被workbench识别
target/config/comps/src/hwif下
xxx.dc xxx.dr - dc dr用于命令行编译
Eg: 新加一个串口驱动
vxbUccSio.c
vxbUccSio.h
vxbUccSio.mk
vxbUccSio.dc
vxbUccSio.dr
40vxbUccSio.cdf
Q:
如何判断是什么文件系统?
A:
chkdsk() & hrfsChkDsk() 和 dosFsShow()
STATUS dosFsShow
(
void * pDevName,
u_int level
)
STATUS chkdsk
(
const char * pDevName,
u_int repairLevel,
u_int verbose
)
STATUS hrfsChkDsk
(
char * path,
int verbLevel,
int flags
)
Q:
添加中断show
A:
# define INCLUDE_ISR_OBJECTS
# define INCLUDE_ISR_SHOW
# define INCLUDE_ISR_DEFER
Q:
添加EDR信息
A:
#define INCLUDE_EDR_SHOW
#define INCLUDE_EDR_ERRLOG
#define INCLUDE_EDR_PM
#define INCLUDE_EDR_SYSDBG_FLAG
Q:
显示ICMP信息
A:
icmpstatShow
Q:
vxWorks 存储分布
A:
Q:
在代码里面查找符号表,然后加载
A:
status = symFindByName(sysSymTbl, "test", (char *)&task_entry, ptype);
task_entry();
Q:
长跳转指令
A:
Relocation value does not fit in 26 bits
-Xcode-absolute-far编译使其支持长跳转指令
Q:
查看中断异常
A:
-> sysExcMsg sysExcMsg = 0x1d197f8: value = 17152 = 0x4300
-> d 0x4300
Q:
如何防止临界区被中断打断
A:
(1)intLock():使中断禁止
(2)intUnlock():开中断
可以用intLock/intUnlock提供最高级别的互斥机制以保护临界区域不被打断
Q:
vxWorks怎么通过文件IO访问设备的
A:
Q:
vxWorks启动流程
A:
Q:
vxWorks默认的注释类型是“”在使用C++类型的注释“//”,就有可能报错。
A:
Q:
vxWorks 系统编程中任务级与中断级的通讯如何实现?
A:
中断是由硬件触发,软件的作用只是将中断服务例程(ISP)与中断事件连接起来.
1.使能中断,函数intEnable().
2.用intConnect()登记中断号,和相应的中断例程ISR.
这样一旦有中断发生,系统自动跳转到相应位置执行ISR.
前情回顾
重新审视你的”系统工程“——SpaceX对系统工程的颠覆认知
美国海军花费1.42亿美元将机载战术训练系统移植到SCA4.1架构
联系客服