vxworks点滴记录

MPC852---大端模式
 
 
 
intLock和taskLock 一样,当调用者进入READY、PEND、SUSPEND 这样的状态而主动让出CPU 时,VxWorks 会重新使能中断,并调度到其它任务
 
任务锁和互斥信号量的系统函数都支持嵌套(allows nested)
 
sysClkRateSet(100); //每秒100 tick
 
taskDelay()是最简单的延时办法,他的单位是tick
 
taskDelay(1)的延时时间相差很大,位于0~10ms 之间,原因用者,它延时多
 长时间,就取决于调用taskDelay 时所处的时间位置
 
 
 
中断里面或者taskLock内不应该有阻塞函数(例如printf, malloc等)
 
 
 
结构体对齐--默认四字节
 
#define _WRS_PACK_ALIGN(x) __attribute__((packed, aligned(x)))
 
struct myType {
 ...
 } _WRS_PACK_ALIGN(1);
 

低优先任务启动高优先级任务,高优先级任务立即启动
 
高优先级启动两个不同等级的低优先级任务,谁先调用谁先启动
 
shell常用命令
 
(1) i---查看所有任务
 (2) checkStack(tTelnetd)----检查任务的堆栈
 (3) spy--监测各任务CPU占有率
     spyStop--停止监测
     需添加development tool components--spy 组件
 
(4)tt--该命令可用来追踪任务挂起原因
 
(5)memShow--监测heap
   需添加development tool components-->show routines-->memory show routine组件
 
(6)printErrno value -打印系统定义的错误码的宏
 
development tool components-->sysbol table components-->error status table
 
(7)sysExcMsg--查看中断异常(下面有详细说明)
 
-> sysExcMsg
 sysExcMsg = 0x1d197f8: value = 17152 = 0x4300
 -> d 0x4300
 
(8)timexN--查看函数执行时间
 
例如:timexN delay,100
 
 
 
如果在中断处理程序中发生异常(比如上面所说的数目访问异常等),那么VxWorks
 就不能象处理任务异常一样挂起任务了,因为在中断中,没有任务相关的上下文,这
 时VxWorks 会记录一个简单的异常记录,并自动触发系统复位。这个简单的异常记录
 依赖于事先配置的内存地址,也就是说会把这个异常信息记录在这个地址所开始的一
 段存储空间中,系统复位后,我们可以通过察看这个地址来得到复位前的异常信息。
 6-60
 这个地址是在VxWorks 裁减时配置的,缺省值是0x4300,在一个运行中的系统,我
 们可以通过sysExcMsg 这个全局变量来获得这个地址,
 
 
 
char   *   creationDate       =   __DATE__   ",   "   __TIME__;          -----获取软件编译时间
 

 #define ERRORMSG()      printf("%s@%d: ERROR!\n",__FILE__, __LINE__)    ----获取当前代码所在的文件及行数
 
 
 
 int变量占四个字节
 
 
 
POWERPC 大端
 
 
 
waring:  makes pointer from integer without a cast....................一般是因为对指针直接复制变量值,而不是变量地址导致
 
 
 
 在线帮忙文档--默认IE浏览器打开,其他会有问题
 
 
 
通过MALLOC申请的内存,再用FREE释放后,剩下的那个野指针怎么处理?
 
free后,接着加上一句p=NULL比较好一些
 
vxworks.h头文件 一些宏定义含义
 
#if !defined(FALSE) || (FALSE!=0)
 #define FALSE  0
 #endif
 
#if !defined(TRUE) || (TRUE!=1)
 #define TRUE  1
 #endif
 
#define NONE  (-1) /* for times when NULL won't do */
 #define EOS  '\0' /* C string terminator */
 
/* return status values */
 
#define OK  0
 #define ERROR  (-1)
 
/* timeout defines */
 
#define NO_WAIT  0
 #define WAIT_FOREVER (-1)
 
 
 
读取文件信息shell命令
 
cd "/tffs0"
 
ls "/tffs0",1
 
 
 
请问一下各位,malloc最大能分配多少字节的空间是由什么决定的啊?怎么样才能知道呢 ?
 
memShow函数。这个值基本在(sysMemTop - RAM_HIGH)到LOCAL_MEM_SIZE之间,bootrom会更小一点。
 
这个可以试出来,在target shell下。
 -> a=malloc(0x6000000)
 a = 0x80238f30: value = -2144737348 = 0x8029e7bc
 -> free(a)
 value = 0 = 0x0
 -> a=malloc(0x8000000)
 0x8029e570 (tShell0): memPartAlloc: block too big 134217728 bytes (0x4 aligned) in partition 0x8020aa34
 a = 0x80238f30: value = 0 = 0x0
 

空间分配config.h
 
 
 
#define LOCAL_MEM_LOCAL_ADRS 0x00000000 /* Base of RAM */
 #define LOCAL_MEM_SIZE  0x02000000  /* 16 Mbyte memory available */
 
/* RAM address for ROM boot */
 #define RAM_HIGH_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00800000)
 
/* RAM address for sys image */
 #define RAM_LOW_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00010000)
 
 
 
LOCAL_MEM_LOCAL_ADRS是RAM的起始地址
 
RAM_LOW_ADRS是VxWorks的加载点,也是VxWorks代码段的起始位置
 
lFREE_RAM_ADRS是VxWorks映象的结束点。通常也是系统内存池和目标服务器内存池的起始地址
 
 RAM_HIGH_ADRS是ROM引导程序的加载点。它也是ROM引导程序(除驻留ROM引导程序之外)的代码段的起始位置,或驻留ROM引导程序数据段的起始位置。
 
 
 
 
 
快捷键ESC+K---shell下复制上一条命令 
 
 
 
vxworks 编程注意地方
 
1.删除了*.h文件后,之前调用该头文件的文件,需重新关联dependence才能编译通过
 
2.其中一个点C文件定义一个全局函数,其他点C文件能直接调用
 
3.其中一个点C文件定义一个全局变量,其他点C必须引用才能使用
 
4.vxworks的C文件如果里面函数一个都未调用,则C文件的函数无法直接通过shell调试调用!
 
 
 
vxWork下怎么设置套接字的recv超时?
 
在VC上面可以用下面的代码来做
 //============设置套接字属性============
         int nNetTimeout=1000;//1秒
         //发送时限
         setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(const char *)&nNetTimeout,sizeof(int));
         //接收时限
         setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(const char *)&nNetTimeout,sizeof(int));
 
 在vxworks 5.5版本下,无SO_SNDTIMEO,SO_RCVTIMO参数,可用select实现,详见博客中“select详解及代码释义”一文
 
 
 
vxwoks下生成的影像文件含义是什么?
 
vxWorks: 1361552(t) + 151888(d) +  1443296(b) = 2956736 (5366336 unused)
 
(t): TEXT   1.361552M
 
(d):DATA  151.888K
 
(b): BSS   1.443296M
 
系统映像包括三部分:TEXT段、DATA段、BSS段。
 
其中TEXT段是代码段,使用的内存基本是必须的;
 
DATA段是数据段,包括已经初始化的全局变量和数组;
 
BSS段是未初始化的数据段,包括未初始化的全局变量和数组,实际上基本不占用Flash存储空间,在VxWorks系统启动的时候在内存将其进行扩展为全零。
 
 
 
ctrl+x 和ctrl+c
 
Ctrl+X,Ctrl+C都是在ty中处理的,分别需要通过ioctl设置OPT_MON_TRAP和OPT_ABORT
 选项(默认是打开的),ctrl+c调用shellRestart实现shell重启,ctrl+x直接调用
 reboot实现系统重启
 
ioctl(psEnv->slaveFd, FIOOPTIONS, OPT_RAW);        //---psEnv->slaveFd为调试串口句柄, 去掉ctrl+x 和ctrl+c功能 
 
 
 
调试串口如何切换成tShell使用
 1.关闭tShell任务 --taskDelete( taskNameToId("tShell") );
 2.重新定位shell到调试串口句柄中--shellOrigStdSet(STD_IN, psEnv->slaveFd);   ---psEnv->slaveFd为调试串口句柄
 3.shell初始化--shellInit (0, TRUE);
 
 
 
请问怎样在shell中查看vxworks中的全局变量值 
 
全局变量可以直接查,方法就是输入全局变量名然后回车就可以了,
 不过我用的时候感觉这样直接显示的是一个机器字长的值。
 如果你想看的更真切,可以通过刚才查询时附带的内存地址,
 d出内存来直接看。
 
 
 
如何发送255.255.255.255广播包及直接发送链路层包?
 
VxWorks下增强型网络驱动-END(EnhancedNetworkDriver)是一个数据链路层驱动程序,增强型网络驱动(END)是OSI模型中数据链路层的实现,通过MUX函数与网络协议层通讯。主要是使用muxBind()函数--详细见《vxworks下MUX接口的使用》
 
 
 
vxworks工程无法编译通过?
 
可能是makefile文件需更新,通过dependencies重新编译 (一个或多个dependencies,通常是为了编译目标文件所需要的其它文件)
 
 
 
浮点运算问题?
 
在生成任务时,如果在任务中使用浮点计算,一定需要将任务的标志VX_FP_TASK设置,否则将会出错

MPC852---大端模式
 
 
 
intLock和taskLock 一样,当调用者进入READY、PEND、SUSPEND 这样的状态而主动让出CPU 时,VxWorks 会重新使能中断,并调度到其它任务
 
任务锁和互斥信号量的系统函数都支持嵌套(allows nested)
 
sysClkRateSet(100); //每秒100 tick
 
taskDelay()是最简单的延时办法,他的单位是tick
 
taskDelay(1)的延时时间相差很大,位于0~10ms 之间,原因用者,它延时多
 长时间,就取决于调用taskDelay 时所处的时间位置
 
 
 
中断里面或者taskLock内不应该有阻塞函数(例如printf, malloc等)
 
 
 
结构体对齐--默认四字节
 
#define _WRS_PACK_ALIGN(x) __attribute__((packed, aligned(x)))
 
struct myType {
 ...
 } _WRS_PACK_ALIGN(1);
 

低优先任务启动高优先级任务,高优先级任务立即启动
 
高优先级启动两个不同等级的低优先级任务,谁先调用谁先启动
 
shell常用命令
 
(1) i---查看所有任务
 (2) checkStack(tTelnetd)----检查任务的堆栈
 (3) spy--监测各任务CPU占有率
     spyStop--停止监测
     需添加development tool components--spy 组件
 
(4)tt--该命令可用来追踪任务挂起原因
 
(5)memShow--监测heap
   需添加development tool components-->show routines-->memory show routine组件
 
(6)printErrno value -打印系统定义的错误码的宏
 
development tool components-->sysbol table components-->error status table
 
(7)sysExcMsg--查看中断异常(下面有详细说明)
 
-> sysExcMsg
 sysExcMsg = 0x1d197f8: value = 17152 = 0x4300
 -> d 0x4300
 
(8)timexN--查看函数执行时间
 
例如:timexN delay,100
 
 
 
如果在中断处理程序中发生异常(比如上面所说的数目访问异常等),那么VxWorks
 就不能象处理任务异常一样挂起任务了,因为在中断中,没有任务相关的上下文,这
 时VxWorks 会记录一个简单的异常记录,并自动触发系统复位。这个简单的异常记录
 依赖于事先配置的内存地址,也就是说会把这个异常信息记录在这个地址所开始的一
 段存储空间中,系统复位后,我们可以通过察看这个地址来得到复位前的异常信息。
 6-60
 这个地址是在VxWorks 裁减时配置的,缺省值是0x4300,在一个运行中的系统,我
 们可以通过sysExcMsg 这个全局变量来获得这个地址,
 
 
 
char   *   creationDate       =   __DATE__   ",   "   __TIME__;          -----获取软件编译时间
 

 #define ERRORMSG()      printf("%s@%d: ERROR!\n",__FILE__, __LINE__)    ----获取当前代码所在的文件及行数
 
 
 
 int变量占四个字节
 
 
 
POWERPC 大端
 
 
 
waring:  makes pointer from integer without a cast....................一般是因为对指针直接复制变量值,而不是变量地址导致
 
 
 
 在线帮忙文档--默认IE浏览器打开,其他会有问题
 
 
 
通过MALLOC申请的内存,再用FREE释放后,剩下的那个野指针怎么处理?
 
free后,接着加上一句p=NULL比较好一些
 
vxworks.h头文件 一些宏定义含义
 
#if !defined(FALSE) || (FALSE!=0)
 #define FALSE  0
 #endif
 
#if !defined(TRUE) || (TRUE!=1)
 #define TRUE  1
 #endif
 
#define NONE  (-1) /* for times when NULL won't do */
 #define EOS  '\0' /* C string terminator */
 
/* return status values */
 
#define OK  0
 #define ERROR  (-1)
 
/* timeout defines */
 
#define NO_WAIT  0
 #define WAIT_FOREVER (-1)
 
 
 
读取文件信息shell命令
 
cd "/tffs0"
 
ls "/tffs0",1
 
 
 
请问一下各位,malloc最大能分配多少字节的空间是由什么决定的啊?怎么样才能知道呢 ?
 
memShow函数。这个值基本在(sysMemTop - RAM_HIGH)到LOCAL_MEM_SIZE之间,bootrom会更小一点。
 
这个可以试出来,在target shell下。
 -> a=malloc(0x6000000)
 a = 0x80238f30: value = -2144737348 = 0x8029e7bc
 -> free(a)
 value = 0 = 0x0
 -> a=malloc(0x8000000)
 0x8029e570 (tShell0): memPartAlloc: block too big 134217728 bytes (0x4 aligned) in partition 0x8020aa34
 a = 0x80238f30: value = 0 = 0x0
 

空间分配config.h
 
 
 
#define LOCAL_MEM_LOCAL_ADRS 0x00000000 /* Base of RAM */
 #define LOCAL_MEM_SIZE  0x02000000  /* 16 Mbyte memory available */
 
/* RAM address for ROM boot */
 #define RAM_HIGH_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00800000)
 
/* RAM address for sys image */
 #define RAM_LOW_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00010000)
 
 
 
LOCAL_MEM_LOCAL_ADRS是RAM的起始地址
 
RAM_LOW_ADRS是VxWorks的加载点,也是VxWorks代码段的起始位置
 
lFREE_RAM_ADRS是VxWorks映象的结束点。通常也是系统内存池和目标服务器内存池的起始地址
 
 RAM_HIGH_ADRS是ROM引导程序的加载点。它也是ROM引导程序(除驻留ROM引导程序之外)的代码段的起始位置,或驻留ROM引导程序数据段的起始位置。
 
 
 
 
 
快捷键ESC+K---shell下复制上一条命令
 
 
 
vxworks 编程注意地方
 
1.删除了*.h文件后,之前调用该头文件的文件,需重新关联dependence才能编译通过
 
2.其中一个点C文件定义一个全局函数,其他点C文件能直接调用
 
3.其中一个点C文件定义一个全局变量,其他点C必须引用才能使用
 
4.vxworks的C文件如果里面函数一个都未调用,则C文件的函数无法直接通过shell调试调用!
 
 
 
vxWork下怎么设置套接字的recv超时?
 
在VC上面可以用下面的代码来做
 //============设置套接字属性============
         int nNetTimeout=1000;//1秒
         //发送时限
         setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(const char *)&nNetTimeout,sizeof(int));
         //接收时限
         setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(const char *)&nNetTimeout,sizeof(int));
 
 在vxworks 5.5版本下,无SO_SNDTIMEO,SO_RCVTIMO参数,可用select实现,详见博客中“select详解及代码释义”一文
 
 
 
vxwoks下生成的影像文件含义是什么?
 
vxWorks: 1361552(t) + 151888(d) +  1443296(b) = 2956736 (5366336 unused)
 
(t): TEXT   1.361552M
 
(d):DATA  151.888K
 
(b): BSS   1.443296M
 
系统映像包括三部分:TEXT段、DATA段、BSS段。
 
其中TEXT段是代码段,使用的内存基本是必须的;
 
DATA段是数据段,包括已经初始化的全局变量和数组;
 
BSS段是未初始化的数据段,包括未初始化的全局变量和数组,实际上基本不占用Flash存储空间,在VxWorks系统启动的时候在内存将其进行扩展为全零。
 
 
 
ctrl+x 和ctrl+c
 
Ctrl+X,Ctrl+C都是在ty中处理的,分别需要通过ioctl设置OPT_MON_TRAP和OPT_ABORT
 选项(默认是打开的),ctrl+c调用shellRestart实现shell重启,ctrl+x直接调用
 reboot实现系统重启
 
ioctl(psEnv->slaveFd, FIOOPTIONS, OPT_RAW);        //---psEnv->slaveFd为调试串口句柄, 去掉ctrl+x 和ctrl+c功能
 
 
 
调试串口如何切换成tShell使用
 1.关闭tShell任务 --taskDelete( taskNameToId("tShell") );
 2.重新定位shell到调试串口句柄中--shellOrigStdSet(STD_IN, psEnv->slaveFd);   ---psEnv->slaveFd为调试串口句柄
 3.shell初始化--shellInit (0, TRUE);
 
 
 
请问怎样在shell中查看vxworks中的全局变量值
 
全局变量可以直接查,方法就是输入全局变量名然后回车就可以了,
 不过我用的时候感觉这样直接显示的是一个机器字长的值。
 如果你想看的更真切,可以通过刚才查询时附带的内存地址,
 d出内存来直接看。
 
 
 
如何发送255.255.255.255广播包及直接发送链路层包?
 
VxWorks下增强型网络驱动-END(EnhancedNetworkDriver)是一个数据链路层驱动程序,增强型网络驱动(END)是OSI模型中数据链路层的实现,通过MUX函数与网络协议层通讯。主要是使用muxBind()函数--详细见《vxworks下MUX接口的使用》
 
 
 
vxworks工程无法编译通过?
 
可能是makefile文件需更新,通过dependencies重新编译 (一个或多个dependencies,通常是为了编译目标文件所需要的其它文件)
 
 
 
浮点运算问题?
 
在生成任务时,如果在任务中使用浮点计算,一定需要将任务的标志VX_FP_TASK设置,否则将会出错

 

MPC852---大端模式
 
 
 
intLock和taskLock 一样,当调用者进入READY、PEND、SUSPEND 这样的状态而主动让出CPU 时,VxWorks 会重新使能中断,并调度到其它任务
 
任务锁和互斥信号量的系统函数都支持嵌套(allows nested)
 
sysClkRateSet(100); //每秒100 tick
 
taskDelay()是最简单的延时办法,他的单位是tick
 
taskDelay(1)的延时时间相差很大,位于0~10ms 之间,原因用者,它延时多
 长时间,就取决于调用taskDelay 时所处的时间位置
 
 
 
中断里面或者taskLock内不应该有阻塞函数(例如printf, malloc等)
 
 
 
结构体对齐--默认四字节
 
#define _WRS_PACK_ALIGN(x) __attribute__((packed, aligned(x)))
 
struct myType {
 ...
 } _WRS_PACK_ALIGN(1);
 

低优先任务启动高优先级任务,高优先级任务立即启动
 
高优先级启动两个不同等级的低优先级任务,谁先调用谁先启动
 
shell常用命令
 
(1) i---查看所有任务
 (2) checkStack(tTelnetd)----检查任务的堆栈
 (3) spy--监测各任务CPU占有率
     spyStop--停止监测
     需添加development tool components--spy 组件
 
(4)tt--该命令可用来追踪任务挂起原因
 
(5)memShow--监测heap
   需添加development tool components-->show routines-->memory show routine组件
 
(6)printErrno value -打印系统定义的错误码的宏
 
development tool components-->sysbol table components-->error status table
 
(7)sysExcMsg--查看中断异常(下面有详细说明)
 
-> sysExcMsg
 sysExcMsg = 0x1d197f8: value = 17152 = 0x4300
 -> d 0x4300
 
(8)timexN--查看函数执行时间
 
例如:timexN delay,100
 
 
 
如果在中断处理程序中发生异常(比如上面所说的数目访问异常等),那么VxWorks
 就不能象处理任务异常一样挂起任务了,因为在中断中,没有任务相关的上下文,这
 时VxWorks 会记录一个简单的异常记录,并自动触发系统复位。这个简单的异常记录
 依赖于事先配置的内存地址,也就是说会把这个异常信息记录在这个地址所开始的一
 段存储空间中,系统复位后,我们可以通过察看这个地址来得到复位前的异常信息。
 6-60
 这个地址是在VxWorks 裁减时配置的,缺省值是0x4300,在一个运行中的系统,我
 们可以通过sysExcMsg 这个全局变量来获得这个地址,
 
 
 
char   *   creationDate       =   __DATE__   ",   "   __TIME__;          -----获取软件编译时间
 

 #define ERRORMSG()      printf("%s@%d: ERROR!\n",__FILE__, __LINE__)    ----获取当前代码所在的文件及行数
 
 
 
 int变量占四个字节
 
 
 
POWERPC 大端
 
 
 
waring:  makes pointer from integer without a cast....................一般是因为对指针直接复制变量值,而不是变量地址导致
 
 
 
 在线帮忙文档--默认IE浏览器打开,其他会有问题
 
 
 
通过MALLOC申请的内存,再用FREE释放后,剩下的那个野指针怎么处理?
 
free后,接着加上一句p=NULL比较好一些
 
vxworks.h头文件 一些宏定义含义
 
#if !defined(FALSE) || (FALSE!=0)
 #define FALSE  0
 #endif
 
#if !defined(TRUE) || (TRUE!=1)
 #define TRUE  1
 #endif
 
#define NONE  (-1) /* for times when NULL won't do */
 #define EOS  '\0' /* C string terminator */
 
/* return status values */
 
#define OK  0
 #define ERROR  (-1)
 
/* timeout defines */
 
#define NO_WAIT  0
 #define WAIT_FOREVER (-1)
 
 
 
读取文件信息shell命令
 
cd "/tffs0"
 
ls "/tffs0",1
 
 
 
请问一下各位,malloc最大能分配多少字节的空间是由什么决定的啊?怎么样才能知道呢 ?
 
memShow函数。这个值基本在(sysMemTop - RAM_HIGH)到LOCAL_MEM_SIZE之间,bootrom会更小一点。
 
这个可以试出来,在target shell下。
 -> a=malloc(0x6000000)
 a = 0x80238f30: value = -2144737348 = 0x8029e7bc
 -> free(a)
 value = 0 = 0x0
 -> a=malloc(0x8000000)
 0x8029e570 (tShell0): memPartAlloc: block too big 134217728 bytes (0x4 aligned) in partition 0x8020aa34
 a = 0x80238f30: value = 0 = 0x0
 

空间分配config.h
 
 
 
#define LOCAL_MEM_LOCAL_ADRS 0x00000000 /* Base of RAM */
 #define LOCAL_MEM_SIZE  0x02000000  /* 16 Mbyte memory available */
 
/* RAM address for ROM boot */
 #define RAM_HIGH_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00800000)
 
/* RAM address for sys image */
 #define RAM_LOW_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00010000)
 
 
 
LOCAL_MEM_LOCAL_ADRS是RAM的起始地址
 
RAM_LOW_ADRS是VxWorks的加载点,也是VxWorks代码段的起始位置
 
lFREE_RAM_ADRS是VxWorks映象的结束点。通常也是系统内存池和目标服务器内存池的起始地址
 
 RAM_HIGH_ADRS是ROM引导程序的加载点。它也是ROM引导程序(除驻留ROM引导程序之外)的代码段的起始位置,或驻留ROM引导程序数据段的起始位置。
 
 
 
 
 
快捷键ESC+K---shell下复制上一条命令
 
 
 
vxworks 编程注意地方
 
1.删除了*.h文件后,之前调用该头文件的文件,需重新关联dependence才能编译通过
 
2.其中一个点C文件定义一个全局函数,其他点C文件能直接调用
 
3.其中一个点C文件定义一个全局变量,其他点C必须引用才能使用
 
4.vxworks的C文件如果里面函数一个都未调用,则C文件的函数无法直接通过shell调试调用!
 
 
 
vxWork下怎么设置套接字的recv超时?
 
在VC上面可以用下面的代码来做
 //============设置套接字属性============
         int nNetTimeout=1000;//1秒
         //发送时限
         setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(const char *)&nNetTimeout,sizeof(int));
         //接收时限
         setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(const char *)&nNetTimeout,sizeof(int));
 
 在vxworks 5.5版本下,无SO_SNDTIMEO,SO_RCVTIMO参数,可用select实现,详见博客中“select详解及代码释义”一文
 
 
 
vxwoks下生成的影像文件含义是什么?
 
vxWorks: 1361552(t) + 151888(d) +  1443296(b) = 2956736 (5366336 unused)
 
(t): TEXT   1.361552M
 
(d):DATA  151.888K
 
(b): BSS   1.443296M
 
系统映像包括三部分:TEXT段、DATA段、BSS段。
 
其中TEXT段是代码段,使用的内存基本是必须的;
 
DATA段是数据段,包括已经初始化的全局变量和数组;
 
BSS段是未初始化的数据段,包括未初始化的全局变量和数组,实际上基本不占用Flash存储空间,在VxWorks系统启动的时候在内存将其进行扩展为全零。
 
 
 
ctrl+x 和ctrl+c
 
Ctrl+X,Ctrl+C都是在ty中处理的,分别需要通过ioctl设置OPT_MON_TRAP和OPT_ABORT
 选项(默认是打开的),ctrl+c调用shellRestart实现shell重启,ctrl+x直接调用
 reboot实现系统重启
 
ioctl(psEnv->slaveFd, FIOOPTIONS, OPT_RAW);        //---psEnv->slaveFd为调试串口句柄, 去掉ctrl+x 和ctrl+c功能
 
 
 
调试串口如何切换成tShell使用
 1.关闭tShell任务 --taskDelete( taskNameToId("tShell") );
 2.重新定位shell到调试串口句柄中--shellOrigStdSet(STD_IN, psEnv->slaveFd);   ---psEnv->slaveFd为调试串口句柄
 3.shell初始化--shellInit (0, TRUE);
 
 
 
请问怎样在shell中查看vxworks中的全局变量值
 
全局变量可以直接查,方法就是输入全局变量名然后回车就可以了,
 不过我用的时候感觉这样直接显示的是一个机器字长的值。
 如果你想看的更真切,可以通过刚才查询时附带的内存地址,
 d出内存来直接看。
 
 
 
如何发送255.255.255.255广播包及直接发送链路层包?
 
VxWorks下增强型网络驱动-END(EnhancedNetworkDriver)是一个数据链路层驱动程序,增强型网络驱动(END)是OSI模型中数据链路层的实现,通过MUX函数与网络协议层通讯。主要是使用muxBind()函数--详细见《vxworks下MUX接口的使用》
 
 
 
vxworks工程无法编译通过?
 
可能是makefile文件需更新,通过dependencies重新编译 (一个或多个dependencies,通常是为了编译目标文件所需要的其它文件)
 
 
 
浮点运算问题?
 
在生成任务时,如果在任务中使用浮点计算,一定需要将任务的标志VX_FP_TASK设置,否则将会出错

 

MPC852---大端模式
 
 
 
intLock和taskLock 一样,当调用者进入READY、PEND、SUSPEND 这样的状态而主动让出CPU 时,VxWorks 会重新使能中断,并调度到其它任务
 
任务锁和互斥信号量的系统函数都支持嵌套(allows nested)
 
sysClkRateSet(100); //每秒100 tick
 
taskDelay()是最简单的延时办法,他的单位是tick
 
taskDelay(1)的延时时间相差很大,位于0~10ms 之间,原因用者,它延时多
 长时间,就取决于调用taskDelay 时所处的时间位置
 
 
 
中断里面或者taskLock内不应该有阻塞函数(例如printf, malloc等)
 
 
 
结构体对齐--默认四字节
 
#define _WRS_PACK_ALIGN(x) __attribute__((packed, aligned(x)))
 
struct myType {
 ...
 } _WRS_PACK_ALIGN(1);
 

低优先任务启动高优先级任务,高优先级任务立即启动
 
高优先级启动两个不同等级的低优先级任务,谁先调用谁先启动
 
shell常用命令
 
(1) i---查看所有任务
 (2) checkStack(tTelnetd)----检查任务的堆栈
 (3) spy--监测各任务CPU占有率
     spyStop--停止监测
     需添加development tool components--spy 组件
 
(4)tt--该命令可用来追踪任务挂起原因
 
(5)memShow--监测heap
   需添加development tool components-->show routines-->memory show routine组件
 
(6)printErrno value -打印系统定义的错误码的宏
 
development tool components-->sysbol table components-->error status table
 
(7)sysExcMsg--查看中断异常(下面有详细说明)
 
-> sysExcMsg
 sysExcMsg = 0x1d197f8: value = 17152 = 0x4300
 -> d 0x4300
 
(8)timexN--查看函数执行时间
 
例如:timexN delay,100
 
 
 
如果在中断处理程序中发生异常(比如上面所说的数目访问异常等),那么VxWorks
 就不能象处理任务异常一样挂起任务了,因为在中断中,没有任务相关的上下文,这
 时VxWorks 会记录一个简单的异常记录,并自动触发系统复位。这个简单的异常记录
 依赖于事先配置的内存地址,也就是说会把这个异常信息记录在这个地址所开始的一
 段存储空间中,系统复位后,我们可以通过察看这个地址来得到复位前的异常信息。
 6-60
 这个地址是在VxWorks 裁减时配置的,缺省值是0x4300,在一个运行中的系统,我
 们可以通过sysExcMsg 这个全局变量来获得这个地址,
 
 
 
char   *   creationDate       =   __DATE__   ",   "   __TIME__;          -----获取软件编译时间
 

 #define ERRORMSG()      printf("%s@%d: ERROR!\n",__FILE__, __LINE__)    ----获取当前代码所在的文件及行数
 
 
 
 int变量占四个字节
 
 
 
POWERPC 大端
 
 
 
waring:  makes pointer from integer without a cast....................一般是因为对指针直接复制变量值,而不是变量地址导致
 
 
 
 在线帮忙文档--默认IE浏览器打开,其他会有问题
 
 
 
通过MALLOC申请的内存,再用FREE释放后,剩下的那个野指针怎么处理?
 
free后,接着加上一句p=NULL比较好一些
 
vxworks.h头文件 一些宏定义含义
 
#if !defined(FALSE) || (FALSE!=0)
 #define FALSE  0
 #endif
 
#if !defined(TRUE) || (TRUE!=1)
 #define TRUE  1
 #endif
 
#define NONE  (-1) /* for times when NULL won't do */
 #define EOS  '\0' /* C string terminator */
 
/* return status values */
 
#define OK  0
 #define ERROR  (-1)
 
/* timeout defines */
 
#define NO_WAIT  0
 #define WAIT_FOREVER (-1)
 
 
 
读取文件信息shell命令
 
cd "/tffs0"
 
ls "/tffs0",1
 
 
 
请问一下各位,malloc最大能分配多少字节的空间是由什么决定的啊?怎么样才能知道呢 ?
 
memShow函数。这个值基本在(sysMemTop - RAM_HIGH)到LOCAL_MEM_SIZE之间,bootrom会更小一点。
 
这个可以试出来,在target shell下。
 -> a=malloc(0x6000000)
 a = 0x80238f30: value = -2144737348 = 0x8029e7bc
 -> free(a)
 value = 0 = 0x0
 -> a=malloc(0x8000000)
 0x8029e570 (tShell0): memPartAlloc: block too big 134217728 bytes (0x4 aligned) in partition 0x8020aa34
 a = 0x80238f30: value = 0 = 0x0
 

空间分配config.h
 
 
 
#define LOCAL_MEM_LOCAL_ADRS 0x00000000 /* Base of RAM */
 #define LOCAL_MEM_SIZE  0x02000000  /* 16 Mbyte memory available */
 
/* RAM address for ROM boot */
 #define RAM_HIGH_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00800000)
 
/* RAM address for sys image */
 #define RAM_LOW_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00010000)
 
 
 
LOCAL_MEM_LOCAL_ADRS是RAM的起始地址
 
RAM_LOW_ADRS是VxWorks的加载点,也是VxWorks代码段的起始位置
 
lFREE_RAM_ADRS是VxWorks映象的结束点。通常也是系统内存池和目标服务器内存池的起始地址
 
 RAM_HIGH_ADRS是ROM引导程序的加载点。它也是ROM引导程序(除驻留ROM引导程序之外)的代码段的起始位置,或驻留ROM引导程序数据段的起始位置。
 
 
 
 
 
快捷键ESC+K---shell下复制上一条命令
 
 
 
vxworks 编程注意地方
 
1.删除了*.h文件后,之前调用该头文件的文件,需重新关联dependence才能编译通过
 
2.其中一个点C文件定义一个全局函数,其他点C文件能直接调用
 
3.其中一个点C文件定义一个全局变量,其他点C必须引用才能使用
 
4.vxworks的C文件如果里面函数一个都未调用,则C文件的函数无法直接通过shell调试调用!
 
 
 
vxWork下怎么设置套接字的recv超时?
 
在VC上面可以用下面的代码来做
 //============设置套接字属性============
         int nNetTimeout=1000;//1秒
         //发送时限
         setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(const char *)&nNetTimeout,sizeof(int));
         //接收时限
         setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(const char *)&nNetTimeout,sizeof(int));
 
 在vxworks 5.5版本下,无SO_SNDTIMEO,SO_RCVTIMO参数,可用select实现,详见博客中“select详解及代码释义”一文
 
 
 
vxwoks下生成的影像文件含义是什么?
 
vxWorks: 1361552(t) + 151888(d) +  1443296(b) = 2956736 (5366336 unused)
 
(t): TEXT   1.361552M
 
(d):DATA  151.888K
 
(b): BSS   1.443296M
 
系统映像包括三部分:TEXT段、DATA段、BSS段。
 
其中TEXT段是代码段,使用的内存基本是必须的;
 
DATA段是数据段,包括已经初始化的全局变量和数组;
 
BSS段是未初始化的数据段,包括未初始化的全局变量和数组,实际上基本不占用Flash存储空间,在VxWorks系统启动的时候在内存将其进行扩展为全零。
 
 
 
ctrl+x 和ctrl+c
 
Ctrl+X,Ctrl+C都是在ty中处理的,分别需要通过ioctl设置OPT_MON_TRAP和OPT_ABORT
 选项(默认是打开的),ctrl+c调用shellRestart实现shell重启,ctrl+x直接调用
 reboot实现系统重启
 
ioctl(psEnv->slaveFd, FIOOPTIONS, OPT_RAW);        //---psEnv->slaveFd为调试串口句柄, 去掉ctrl+x 和ctrl+c功能
 
 
 
调试串口如何切换成tShell使用
 1.关闭tShell任务 --taskDelete( taskNameToId("tShell") );
 2.重新定位shell到调试串口句柄中--shellOrigStdSet(STD_IN, psEnv->slaveFd);   ---psEnv->slaveFd为调试串口句柄
 3.shell初始化--shellInit (0, TRUE);
 
 
 
请问怎样在shell中查看vxworks中的全局变量值
 
全局变量可以直接查,方法就是输入全局变量名然后回车就可以了,
 不过我用的时候感觉这样直接显示的是一个机器字长的值。
 如果你想看的更真切,可以通过刚才查询时附带的内存地址,
 d出内存来直接看。
 
 
 
如何发送255.255.255.255广播包及直接发送链路层包?
 
VxWorks下增强型网络驱动-END(EnhancedNetworkDriver)是一个数据链路层驱动程序,增强型网络驱动(END)是OSI模型中数据链路层的实现,通过MUX函数与网络协议层通讯。主要是使用muxBind()函数--详细见《vxworks下MUX接口的使用》
 
 
 
vxworks工程无法编译通过?
 
可能是makefile文件需更新,通过dependencies重新编译 (一个或多个dependencies,通常是为了编译目标文件所需要的其它文件)
 
 
 
浮点运算问题?
 
在生成任务时,如果在任务中使用浮点计算,一定需要将任务的标志VX_FP_TASK设置,否则将会出错

 

MPC852---大端模式
 
 
 
intLock和taskLock 一样,当调用者进入READY、PEND、SUSPEND 这样的状态而主动让出CPU 时,VxWorks 会重新使能中断,并调度到其它任务
 
任务锁和互斥信号量的系统函数都支持嵌套(allows nested)
 
sysClkRateSet(100); //每秒100 tick
 
taskDelay()是最简单的延时办法,他的单位是tick
 
taskDelay(1)的延时时间相差很大,位于0~10ms 之间,原因用者,它延时多
 长时间,就取决于调用taskDelay 时所处的时间位置
 
 
 
中断里面或者taskLock内不应该有阻塞函数(例如printf, malloc等)
 
 
 
结构体对齐--默认四字节
 
#define _WRS_PACK_ALIGN(x) __attribute__((packed, aligned(x)))
 
struct myType {
 ...
 } _WRS_PACK_ALIGN(1);
 

低优先任务启动高优先级任务,高优先级任务立即启动
 
高优先级启动两个不同等级的低优先级任务,谁先调用谁先启动
 
shell常用命令
 
(1) i---查看所有任务
 (2) checkStack(tTelnetd)----检查任务的堆栈
 (3) spy--监测各任务CPU占有率
     spyStop--停止监测
     需添加development tool components--spy 组件
 
(4)tt--该命令可用来追踪任务挂起原因
 
(5)memShow--监测heap
   需添加development tool components-->show routines-->memory show routine组件
 
(6)printErrno value -打印系统定义的错误码的宏
 
development tool components-->sysbol table components-->error status table
 
(7)sysExcMsg--查看中断异常(下面有详细说明)
 
-> sysExcMsg
 sysExcMsg = 0x1d197f8: value = 17152 = 0x4300
 -> d 0x4300
 
(8)timexN--查看函数执行时间
 
例如:timexN delay,100
 
 
 
如果在中断处理程序中发生异常(比如上面所说的数目访问异常等),那么VxWorks
 就不能象处理任务异常一样挂起任务了,因为在中断中,没有任务相关的上下文,这
 时VxWorks 会记录一个简单的异常记录,并自动触发系统复位。这个简单的异常记录
 依赖于事先配置的内存地址,也就是说会把这个异常信息记录在这个地址所开始的一
 段存储空间中,系统复位后,我们可以通过察看这个地址来得到复位前的异常信息。
 6-60
 这个地址是在VxWorks 裁减时配置的,缺省值是0x4300,在一个运行中的系统,我
 们可以通过sysExcMsg 这个全局变量来获得这个地址,
 
 
 
char   *   creationDate       =   __DATE__   ",   "   __TIME__;          -----获取软件编译时间
 

 #define ERRORMSG()      printf("%s@%d: ERROR!\n",__FILE__, __LINE__)    ----获取当前代码所在的文件及行数
 
 
 
 int变量占四个字节
 
 
 
POWERPC 大端
 
 
 
waring:  makes pointer from integer without a cast....................一般是因为对指针直接复制变量值,而不是变量地址导致
 
 
 
 在线帮忙文档--默认IE浏览器打开,其他会有问题
 
 
 
通过MALLOC申请的内存,再用FREE释放后,剩下的那个野指针怎么处理?
 
free后,接着加上一句p=NULL比较好一些
 
vxworks.h头文件 一些宏定义含义
 
#if !defined(FALSE) || (FALSE!=0)
 #define FALSE  0
 #endif
 
#if !defined(TRUE) || (TRUE!=1)
 #define TRUE  1
 #endif
 
#define NONE  (-1) /* for times when NULL won't do */
 #define EOS  '\0' /* C string terminator */
 
/* return status values */
 
#define OK  0
 #define ERROR  (-1)
 
/* timeout defines */
 
#define NO_WAIT  0
 #define WAIT_FOREVER (-1)
 
 
 
读取文件信息shell命令
 
cd "/tffs0"
 
ls "/tffs0",1
 
 
 
请问一下各位,malloc最大能分配多少字节的空间是由什么决定的啊?怎么样才能知道呢 ?
 
memShow函数。这个值基本在(sysMemTop - RAM_HIGH)到LOCAL_MEM_SIZE之间,bootrom会更小一点。
 
这个可以试出来,在target shell下。
 -> a=malloc(0x6000000)
 a = 0x80238f30: value = -2144737348 = 0x8029e7bc
 -> free(a)
 value = 0 = 0x0
 -> a=malloc(0x8000000)
 0x8029e570 (tShell0): memPartAlloc: block too big 134217728 bytes (0x4 aligned) in partition 0x8020aa34
 a = 0x80238f30: value = 0 = 0x0
 

空间分配config.h
 
 
 
#define LOCAL_MEM_LOCAL_ADRS 0x00000000 /* Base of RAM */
 #define LOCAL_MEM_SIZE  0x02000000  /* 16 Mbyte memory available */
 
/* RAM address for ROM boot */
 #define RAM_HIGH_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00800000)
 
/* RAM address for sys image */
 #define RAM_LOW_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00010000)
 
 
 
LOCAL_MEM_LOCAL_ADRS是RAM的起始地址
 
RAM_LOW_ADRS是VxWorks的加载点,也是VxWorks代码段的起始位置
 
lFREE_RAM_ADRS是VxWorks映象的结束点。通常也是系统内存池和目标服务器内存池的起始地址
 
 RAM_HIGH_ADRS是ROM引导程序的加载点。它也是ROM引导程序(除驻留ROM引导程序之外)的代码段的起始位置,或驻留ROM引导程序数据段的起始位置。
 
 
 
 
 
快捷键ESC+K---shell下复制上一条命令
 
 
 
vxworks 编程注意地方
 
1.删除了*.h文件后,之前调用该头文件的文件,需重新关联dependence才能编译通过
 
2.其中一个点C文件定义一个全局函数,其他点C文件能直接调用
 
3.其中一个点C文件定义一个全局变量,其他点C必须引用才能使用
 
4.vxworks的C文件如果里面函数一个都未调用,则C文件的函数无法直接通过shell调试调用!
 
 
 
vxWork下怎么设置套接字的recv超时?
 
在VC上面可以用下面的代码来做
 //============设置套接字属性============
         int nNetTimeout=1000;//1秒
         //发送时限
         setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(const char *)&nNetTimeout,sizeof(int));
         //接收时限
         setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(const char *)&nNetTimeout,sizeof(int));
 
 在vxworks 5.5版本下,无SO_SNDTIMEO,SO_RCVTIMO参数,可用select实现,详见博客中“select详解及代码释义”一文
 
 
 
vxwoks下生成的影像文件含义是什么?
 
vxWorks: 1361552(t) + 151888(d) +  1443296(b) = 2956736 (5366336 unused)
 
(t): TEXT   1.361552M
 
(d):DATA  151.888K
 
(b): BSS   1.443296M
 
系统映像包括三部分:TEXT段、DATA段、BSS段。
 
其中TEXT段是代码段,使用的内存基本是必须的;
 
DATA段是数据段,包括已经初始化的全局变量和数组;
 
BSS段是未初始化的数据段,包括未初始化的全局变量和数组,实际上基本不占用Flash存储空间,在VxWorks系统启动的时候在内存将其进行扩展为全零。
 
 
 
ctrl+x 和ctrl+c
 
Ctrl+X,Ctrl+C都是在ty中处理的,分别需要通过ioctl设置OPT_MON_TRAP和OPT_ABORT
 选项(默认是打开的),ctrl+c调用shellRestart实现shell重启,ctrl+x直接调用
 reboot实现系统重启
 
ioctl(psEnv->slaveFd, FIOOPTIONS, OPT_RAW);        //---psEnv->slaveFd为调试串口句柄, 去掉ctrl+x 和ctrl+c功能
 
 
 
调试串口如何切换成tShell使用
 1.关闭tShell任务 --taskDelete( taskNameToId("tShell") );
 2.重新定位shell到调试串口句柄中--shellOrigStdSet(STD_IN, psEnv->slaveFd);   ---psEnv->slaveFd为调试串口句柄
 3.shell初始化--shellInit (0, TRUE);
 
 
 
请问怎样在shell中查看vxworks中的全局变量值
 
全局变量可以直接查,方法就是输入全局变量名然后回车就可以了,
 不过我用的时候感觉这样直接显示的是一个机器字长的值。
 如果你想看的更真切,可以通过刚才查询时附带的内存地址,
 d出内存来直接看。
 
 
 
如何发送255.255.255.255广播包及直接发送链路层包?
 
VxWorks下增强型网络驱动-END(EnhancedNetworkDriver)是一个数据链路层驱动程序,增强型网络驱动(END)是OSI模型中数据链路层的实现,通过MUX函数与网络协议层通讯。主要是使用muxBind()函数--详细见《vxworks下MUX接口的使用》
 
 
 
vxworks工程无法编译通过?
 
可能是makefile文件需更新,通过dependencies重新编译 (一个或多个dependencies,通常是为了编译目标文件所需要的其它文件)
 
 
 
浮点运算问题?
 
在生成任务时,如果在任务中使用浮点计算,一定需要将任务的标志VX_FP_TASK设置,否则将会出错

MPC852---大端模式
 
 
 
intLock和taskLock 一样,当调用者进入READY、PEND、SUSPEND 这样的状态而主动让出CPU 时,VxWorks 会重新使能中断,并调度到其它任务
 
任务锁和互斥信号量的系统函数都支持嵌套(allows nested)
 
sysClkRateSet(100); //每秒100 tick
 

taskDelay()是最简单的延时办法,他的单位是tick
 
taskDelay(1)的延时时间相差很大,位于0~10ms 之间,原因用者,它延时多
 长时间,就取决于调用taskDelay 时所处的时间位置
 
 
 
中断里面或者taskLock内不应该有阻塞函数(例如printf, malloc等)
 
 
 
结构体对齐--默认四字节
 
#define _WRS_PACK_ALIGN(x) __attribute__((packed, aligned(x)))
 
struct myType {
 ...
 } _WRS_PACK_ALIGN(1);
 

 

低优先任务启动高优先级任务,高优先级任务立即启动
 
高优先级启动两个不同等级的低优先级任务,谁先调用谁先启动
 

shell常用命令
 
(1) i---查看所有任务
 (2) checkStack(tTelnetd)----检查任务的堆栈
 (3) spy--监测各任务CPU占有率
     spyStop--停止监测
     需添加development tool components--spy 组件
 
(4)tt--该命令可用来追踪任务挂起原因
 
(5)memShow--监测heap
   需添加development tool components-->show routines-->memory show routine组件
 
(6)printErrno value -打印系统定义的错误码的宏
 
development tool components-->sysbol table components-->error status table
 
(7)sysExcMsg--查看中断异常(下面有详细说明)
 
-> sysExcMsg
 sysExcMsg = 0x1d197f8: value = 17152 = 0x4300
 -> d 0x4300
 
(8)timexN--查看函数执行时间
 
例如:timexN delay,100
 
 
 
如果在中断处理程序中发生异常(比如上面所说的数目访问异常等),那么VxWorks
 就不能象处理任务异常一样挂起任务了,因为在中断中,没有任务相关的上下文,这
 时VxWorks 会记录一个简单的异常记录,并自动触发系统复位。这个简单的异常记录
 依赖于事先配置的内存地址,也就是说会把这个异常信息记录在这个地址所开始的一
 段存储空间中,系统复位后,我们可以通过察看这个地址来得到复位前的异常信息。
 6-60
 这个地址是在VxWorks 裁减时配置的,缺省值是0x4300,在一个运行中的系统,我
 们可以通过sysExcMsg 这个全局变量来获得这个地址,
 
 
 
char   *   creationDate       =   __DATE__   ",   "   __TIME__;          -----获取软件编译时间
 


 #define ERRORMSG()      printf("%s@%d: ERROR!\n",__FILE__, __LINE__)    ----获取当前代码所在的文件及行数
 
 
 
 int变量占四个字节
 
 
 
POWERPC 大端
 
 
 
waring:  makes pointer from integer without a cast....................一般是因为对指针直接复制变量值,而不是变量地址导致
 
 
 
 在线帮忙文档--默认IE浏览器打开,其他会有问题
 
 
 
通过MALLOC申请的内存,再用FREE释放后,剩下的那个野指针怎么处理?
 
free后,接着加上一句p=NULL比较好一些
 
vxworks.h头文件 一些宏定义含义
 
#if !defined(FALSE) || (FALSE!=0)
 #define FALSE  0
 #endif
 
#if !defined(TRUE) || (TRUE!=1)
 #define TRUE  1
 #endif
 

#define NONE  (-1) /* for times when NULL won't do */
 #define EOS  '\0' /* C string terminator */
 

/* return status values */
 
#define OK  0
 #define ERROR  (-1)
 
/* timeout defines */
 
#define NO_WAIT  0
 #define WAIT_FOREVER (-1)
 
 
 
读取文件信息shell命令
 
cd "/tffs0"
 
ls "/tffs0",1
 
 
 
请问一下各位,malloc最大能分配多少字节的空间是由什么决定的啊?怎么样才能知道呢 ?
 
memShow函数。这个值基本在(sysMemTop - RAM_HIGH)到LOCAL_MEM_SIZE之间,bootrom会更小一点。
 
这个可以试出来,在target shell下。
 -> a=malloc(0x6000000)
 a = 0x80238f30: value = -2144737348 = 0x8029e7bc
 -> free(a)
 value = 0 = 0x0
 -> a=malloc(0x8000000)
 0x8029e570 (tShell0): memPartAlloc: block too big 134217728 bytes (0x4 aligned) in partition 0x8020aa34
 a = 0x80238f30: value = 0 = 0x0
 


空间分配config.h
 
 
 
#define LOCAL_MEM_LOCAL_ADRS 0x00000000 /* Base of RAM */
 #define LOCAL_MEM_SIZE  0x02000000  /* 16 Mbyte memory available */
 
/* RAM address for ROM boot */
 #define RAM_HIGH_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00800000)
 
/* RAM address for sys image */
 #define RAM_LOW_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00010000)
 
 
 
LOCAL_MEM_LOCAL_ADRS是RAM的起始地址
 
RAM_LOW_ADRS是VxWorks的加载点,也是VxWorks代码段的起始位置
 
lFREE_RAM_ADRS是VxWorks映象的结束点。通常也是系统内存池和目标服务器内存池的起始地址
 
 RAM_HIGH_ADRS是ROM引导程序的加载点。它也是ROM引导程序(除驻留ROM引导程序之外)的代码段的起始位置,或驻留ROM引导程序数据段的起始位置。
 
 
 
 
 
快捷键ESC+K---shell下复制上一条命令
 
 
 
vxworks 编程注意地方
 
1.删除了*.h文件后,之前调用该头文件的文件,需重新关联dependence才能编译通过
 
2.其中一个点C文件定义一个全局函数,其他点C文件能直接调用
 
3.其中一个点C文件定义一个全局变量,其他点C必须引用才能使用
 
4.vxworks的C文件如果里面函数一个都未调用,则C文件的函数无法直接通过shell调试调用!
 
 
 
vxWork下怎么设置套接字的recv超时?
 
在VC上面可以用下面的代码来做
 //============设置套接字属性============
         int nNetTimeout=1000;//1秒
         //发送时限
         setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(const char *)&nNetTimeout,sizeof(int));
         //接收时限
         setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(const char *)&nNetTimeout,sizeof(int));
 

 在vxworks 5.5版本下,无SO_SNDTIMEO,SO_RCVTIMO参数,可用select实现,详见博客中“select详解及代码释义”一文
 
 
 
vxwoks下生成的影像文件含义是什么?
 
vxWorks: 1361552(t) + 151888(d) +  1443296(b) = 2956736 (5366336 unused)
 
(t): TEXT   1.361552M
 
(d):DATA  151.888K
 
(b): BSS   1.443296M
 
系统映像包括三部分:TEXT段、DATA段、BSS段。
 
其中TEXT段是代码段,使用的内存基本是必须的;
 
DATA段是数据段,包括已经初始化的全局变量和数组;
 
BSS段是未初始化的数据段,包括未初始化的全局变量和数组,实际上基本不占用Flash存储空间,在VxWorks系统启动的时候在内存将其进行扩展为全零。
 
 
 
ctrl+x 和ctrl+c
 
Ctrl+X,Ctrl+C都是在ty中处理的,分别需要通过ioctl设置OPT_MON_TRAP和OPT_ABORT
 选项(默认是打开的),ctrl+c调用shellRestart实现shell重启,ctrl+x直接调用
 reboot实现系统重启
 
ioctl(psEnv->slaveFd, FIOOPTIONS, OPT_RAW);        //---psEnv->slaveFd为调试串口句柄, 去掉ctrl+x 和ctrl+c功能
 
 
 
调试串口如何切换成tShell使用
 1.关闭tShell任务 --taskDelete( taskNameToId("tShell") );
 2.重新定位shell到调试串口句柄中--shellOrigStdSet(STD_IN, psEnv->slaveFd);   ---psEnv->slaveFd为调试串口句柄
 3.shell初始化--shellInit (0, TRUE);
 
 
 
请问怎样在shell中查看vxworks中的全局变量值
 
全局变量可以直接查,方法就是输入全局变量名然后回车就可以了,
 不过我用的时候感觉这样直接显示的是一个机器字长的值。
 如果你想看的更真切,可以通过刚才查询时附带的内存地址,
 d出内存来直接看。
 
 
 
如何发送255.255.255.255广播包及直接发送链路层包?
 
VxWorks下增强型网络驱动-END(EnhancedNetworkDriver)是一个数据链路层驱动程序,增强型网络驱动(END)是OSI模型中数据链路层的实现,通过MUX函数与网络协议层通讯。主要是使用muxBind()函数--详细见《vxworks下MUX接口的使用》
 
 
 
vxworks工程无法编译通过?
 
可能是makefile文件需更新,通过dependencies重新编译 (一个或多个dependencies,通常是为了编译目标文件所需要的其它文件)
 
 
 
浮点运算问题?
 
在生成任务时,如果在任务中使用浮点计算,一定需要将任务的标志VX_FP_TASK设置,否则将会出错

你可能感兴趣的:(shell,socket,网络协议,任务,makefile,dependencies)