VxWorks常用函数速查

合集下载

VxWorks常用命令汇总

VxWorks常用命令汇总

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、8m addr,[width] -按width宽度修改addr地址的内容,width可以是1、2、4、8 memShow 1 -显示系统分区上空闲和已分配空间的总数等printErrno value -打印系统定义的错误码的宏3、与网络相关的命令ifShow ["ifname"] - show info about network interfacesinetstatShow - show all Internet protocol socketstcpstatShow - show statistics for TCPudpstatShow - show statistics for UDPipstatShow - show statistics for IPicmpstatShow - show statistics for ICMParpShow - show a list of known ARP entriesmbufShow - 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 statisticsrouteAdd "destaddr","gateaddr" - add route to route tablerouteDelete "destaddr","gateaddr" - delete route from route table说明:上述大多数命令都可以在help、netHelp中查到vxWorks命令规则:名词+动词,第二个单词开始大写序号状态命令备注1 BSP c 改变配置2 BSP p 打印当前配置信息3 BSP @ 开始加载内核4 BSP ctrl+x 重新启动5 BSP6 BSP7 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 "xx.xx.xx.xx",10,0 ping地址xx.xx.xx.xx,共计10次24 vxWorks pciDeviceShow 查看当前系统中的所有PCI设备25 vxWorks pciHeaderShow,0,xx 查看当前系统中的组号为0、地址号为xx 的PCI设备VxWorks中如果稍有不慎,就可能导致task suspend,如果运气好,shell没有被挂起,则可以通过系统的一些命令追踪一下挂起的原因。

vxWorks PAL库函数

vxWorks PAL库函数

ZebOS vxWorks PAL库函数PAL修改列表不需修改的函数条件:未被调用且自身为空函数;IPv6相关;MPLS相关;VRF相关;VRRP相关;VxWorks 系统调用pal_auth.c全部pal_daemon.c全部pal_kernel.cpal_kernel_fib_createpal_kernel_fib_deletepal_kernel_if_bind_vrfpal_kernel_if_unbind_vrfpal_kernel_virtual_ipv4_addpal_kernel_virtual_ipv4_deletepal_kernel_virtual_mac_addpal_kernel_virtual_mac_deletepal_kernel_vrrp_startpal_kernel_vrrp_stoppal_kernel_gratuitous_arp_sendpal_socket.cpal_sock_get_ipv6_checksumpal_sock_get_ipv6_hoplimitpal_sock_get_ipv6_multicast_hopspal_sock_get_ipv6_multicast_looppal_sock_get_ipv6_pktinfopal_sock_get_ipv6_unicast_hopspal_sock_set_ipv6_checksumpal_sock_set_ipv6_hoplimitpal_sock_set_ipv6_icmp_filterpal_sock_set_ipv6_multicast_hopspal_sock_set_ipv6_multicast_joinpal_sock_set_ipv6_multicast_leavepal_sock_set_ipv6_multicast_looppal_sock_set_ipv6_pktinfopal_sock_set_ipv6_unicast_hopspal_sock_set_ipv4_mrt_add_mfcpal_sock_set_ipv4_mrt_add_vifpal_sock_set_ipv4_mrt_assertpal_sock_set_ipv4_mrt_del_mfcpal_sock_set_ipv4_mrt_del_vifpal_sock_set_ipv4_mrt_donepal_sock_set_ipv4_mrt_igmp_donepal_sock_set_ipv4_mrt_igmp_initpal_sock_set_ipv4_mrt_initpal_sock_set_ipv4_mrt_spt_bitpal_sock_set_ipv4_pimpal_sock_raw.cpal_in6_recv_packetpal_in6_send_packetpal_sock_in6_cmsg_finishpal_sock_in6_cmsg_hoplimit_getpal_sock_in6_cmsg_hoplimit_setpal_sock_in6_cmsg_initpal_sock_in6_cmsg_len_getpal_sock_in6_cmsg_lookuppal_sock_in6_cmsg_pktinfo_getpal_sock_in6_cmsg_pktinfo_setpal_sock_set_icmp6_checksum pal_stdlib.cpal_cryptpal_stdlib_startpal_stdlib_stoppal_unamepal_log.c全部pal_mcast.c全部pal_memory.c全部pal_mpls_client.c全部pal_mpls_stats.c全部pal_semaphore.c全部pal_string.c全部pal_time.c全部需要或可能需要被修改:(共计130 个,17个c文件)plat_kernel_fwd_ctrl.c(全部5个)该文件和linux PAL中pal_kernel_ipv4_forwardingpal_kernel_ipv4_forwarding_getpal_kernel_ipv4_forwarding_offpal_kernel_ipv4_forwarding_onpal_kernel_ipv4_forwarding_setplat_kernel_if.c(全部3个)pal_if_stat_updatepal_kernel_if_scanpal_kernel_if_updateplat_kernel_if_api.c(全部19个)pal_kernel_if_addr_getpal_kernel_if_flags_getpal_kernel_if_flags_setpal_kernel_if_flags_unsetpal_kernel_if_get_bwpal_kernel_if_get_hwaddrpal_kernel_if_get_indexpal_kernel_if_get_metricpal_kernel_if_get_mtupal_kernel_if_ipv4_address_addpal_kernel_if_ipv4_address_deletepal_kernel_if_ipv4_address_delete_allpal_kernel_if_ipv4_address_secondary_addpal_kernel_if_ipv4_address_secondary_deletepal_kernel_if_ipv4_address_updatepal_kernel_if_listpal_kernel_if_set_metricpal_kernel_if_set_mtusignedTounsignedLongplat_kernel_rte_mgmt.c(全部4个),或保持接口不变,只修改pal_kernel_rtm_ipv4 pal_kernel_ipv4_addpal_kernel_ipv4_delpal_kernel_ipv4_updatepal_kernel_rtm_ipv4plat_kernel_rte_scan.c(3个)pal_ipv4_route_readpal_kernel_route_scanpal_populate_ipv4_route其中可以只修改pal_populate_ipv4_route plat_kernel_rte_socket.c(17个)IFAMADDRGETIFAMMASKGETpal_af_checkpal_ifam_readpal_ifam_read_mesgpal_ifm_readpal_kernel_readpal_routing_socketpal_rtmsg_debugpal_rtm_flag_dumppal_rtm_readpal_rtm_read_mesgROUNDUPRTMADDRGETRTMMASKGETSOCKADDRSETWRAPUPpal_if_types.cpal_if_typepal_igmp.c(2个)pal_igmp_type_strpal_handle_igmp_messagepal_inet.c(5个)pal_inet_ntoapal_inet_atonpal_inet_ntoppal_inet_ptonpal_inet_pton4pal_kernel.c(2个)pal_kernel_startpal_kernel_stoppal_kernel_arp.c(2个)pal_kernel_l2_ipv4_resolvepal_kernel_L2_ipv4_resolvepal_socket.c(44个)pal_fcntlpal_getservbynamepal_sock_checkpal_sock_get_bindtodevicepal_sock_get_bindtofibpal_sock_get_broadcastpal_sock_get_ipv4_multicast_hopspal_sock_get_ipv4_multicast_looppal_sock_get_ipv4_pimpal_sock_get_ipv4_tos_precpal_sock_get_ipv4_unicast_hopspal_sock_get_ip_hdr_inclpal_sock_get_ip_recvifpal_sock_get_nonblockingpal_sock_get_recvbufpal_sock_get_reuseaddrpal_sock_get_reuseportpal_sock_get_sendbufpal_sock_get_soerrpal_sock_get_tcp_nodelaypal_sock_set_bindtodevicepal_sock_set_bindtofibpal_sock_set_broadcastpal_sock_set_ipv4_dstaddrpal_sock_set_ipv4_tos_precpal_sock_set_ipv4_unicast_hopspal_sock_set_ip_hdr_inclpal_sock_set_ip_recvifpal_sock_set_ipv4_multicast_hopspal_sock_set_ipv4_multicast_ifpal_sock_set_ipv4_multicast_joinpal_sock_set_ipv4_multicast_leavepal_sock_set_ipv4_multicast_looppal_sock_set_ll_multicast_joinpal_sock_set_ll_multicast_leavepal_sock_set_nonblockingpal_sock_set_recvbufpal_sock_set_reuseaddrpal_sock_set_reuseportpal_sock_set_router_alertpal_sock_set_sendbufpal_sock_set_tcp_nodelaypal_sock_startpal_sock_stoppal_sock_ll.c(10个)pal_sock_ll_cisco_hdlcpal_sock_ll_defpal_sock_ll_def_closepal_sock_ll_def_phyaddr_getpal_sock_ll_def_phyaddr_setpal_sock_ll_def_promisc_disablepal_sock_ll_def_promisc_enablepal_sock_ll_def_recvmsgpal_sock_ll_def_sendmsgpal_sock_ll_ethernetpal_sock_raw.c(9个)pal_in4_ip_hdr_len_getpal_in4_ip_hdr_len_setpal_in4_ip_hdr_tos_setpal_in4_ip_packet_len_getpal_in4_ip_packet_len_setpal_in4_packet_peekpal_in4_recv_packetpal_in4_recv_packet_lenpal_in4_send_packetpal_sock_udp.c(1个)pal_in4_udp_recv_packetpal_stdlib.c(3个)pal_in4_header_lengthpal_getcwdpal_system_errpal_utils.c(1个)pal_sin_masklenPAL函数调用关系及功能说明pal_auth.c : 802.1x控制请求vxWorks中没有实现802.1x,因此这部分API均为空函数,均未被ZebOS中任何函数调用。

vxworks代码分析

vxworks代码分析

MemPoolEnd
RootTaskMem 10000
RootTask Stack Root_Task TCB
•在系统初始化时在kernelInit()中分配中 断堆栈和RootTask的TCB和Stack.其他部分
作为系统分区分配.
•在RootTask执行完后在taskDestory中把其 TCB和Stack通过MemAddPool()加到系统分
FREE_BLOCK BLOCK_HDR
pPrevHdr pPrevHdr
表示空闲节点
BLOCK_HDR BLOCK_HDR
FREE_BLOCK BLOCK_HDR
pPrevHdr pPrevHdr pPrevHdr
pPrevHdr
表示整块内存的 首尾“哨兵”
表示已用内存
BLOCK_HDR
pPrevHdr
windExit 或intExit 函数将当前任务的寄存器环境保存在 任务控制块中,调用函数reschedule进行任务调度
windLoadContent 函数从新选择的任务控制块中装载寄存器 上下文
windLoadContent 函数中执行指令 pushl WIND_TCB_PC(%eax), 它将新选择任务的tcb 结构中存放的pc地址压入系统堆栈
kernelLib.c (kernel\vxworks4\target\src\wind)
kernelInit()函数(2/2)
在ቤተ መጻሕፍቲ ባይዱ里创建了系统的第一个任务
taskInit (pTcb, "tRootTask", 0, VX_UNBREAKABLE | VX_DEALLOC_STACK, pRootStackBase, (int) rootStackSize, (FUNCPTR) rootRtn, (int) pMemPoolStart, (int)memPoolSize, 0, 0, 0, 0, 0, 0, 0, 0);

主CPU板vxworks常用命令

主CPU板vxworks常用命令

Vxworks常用命令版本及修订说明:目录VXWORKS常用命令 (1)说明 (2)常用命令 (2)说明常用指令使用两种方式:1、在串口超级终端下输入命令;串口设置为115200,8N1;2、使用telnet登陆装置,然后在shell下输入命令;用户:密码:常用命令命令:version查看vxworks程序时间:命令:ll查看文件列表。

U21平台的主CPU文件系统包括:/shr 、/set、/log、/wave。

命令:cdcd “目录名”命令:rm删除文件“文件路径和文件名称”或者remove “文件路径和文件名称”命令: i查看任务状态。

正常任务状态为:PEND/READY。

异常为:STOP、SUPPEND. 状态中出现+I说明该任务占用了高优先级任务所需要的资源,而被暂时提高了优先级运行。

命令:tt “任务名称”查看任务调用情况。

当系统中出现异常任务时,只要使用命令:tt,可以查看异常任务函数调用情况。

命令:ti “任务名称”查看任务详细信息.命令:checkStack 查看各任务堆栈使用情况。

命令:getcpuusage 查看任务负载。

命令:devs查看驱动设备列表。

命令:iosFdShow查看被打开的文件id列表:命令:systime查看修改装置时间命令;systime “Time=xx:xx:xx”修改时间;systime “TIME=XX-XX-XX”修改日期其中:status为0为没有检查到外部对时。

status为1为对时源为1588对时;2为B码;4为PPS;但与定值配置不符。

status=800x:表示外部对时正常;x为1为1588对时;2为B码;4为PPS 命令:ifShow查看网口IP地址。

命令:ifAddrSet修改装置网卡IP地址:格式:ifAddrSet "qefcc0","198.120.0.107"其中:qefcc0为第一个网口(板卡面板从上往下数),qefcc1为第二个网口,qefcc2为第三个网口。

VxWorks编程常用函数说明

VxWorks编程常用函数说明
if (select(width, &readFds, NULL, NULL, NULL) == ERROR) { /*监听*/ close(fds[0]); ... ...; close(fds[3]); return; } for(i=0; i if (FD_ISSET(fds[i], &readFds)) { ... ...; /* 进行读写操作 */
三、IO 系统:ioLib.h 1、系统中的 IO 设备,包括键盘、串口、文件等,都用统一的接口访问。第一步通常先得到 文件描述符,然后进行读写或者设置的工作,最后关闭该描述符。 creat:建立文件 open:得到文件或设备的描述符 read:读文件或设备 write:写文件或设备 ioctl:设置参数 close:关闭文件描述符 remove:删除文件
二、常用的库: #i nclude "taskLib.h" /* 任务 */ #i nclude "msgQLib.h" /* 消息队列 */ #i nclude "semLib.h" /* 信号量 */ #i nclude "ioLib.h" /* IO */ #i nclude "wdLib.h" /* Watch dog */ #i nclude "logLib.h" /* 信息输出 */ #i nclude "socket.h" /* 网络套接字 */
taskSend() { int pd; /* pipe 的描述符 */ if ((pd = open("/pipe/mypipe", O_WRONLY, 0644)) == ERROR) { printf("Open pipe failed!"); } if (semTake(semMID, NO_WAIT) == ERROR) { printf("Pipe in use!"); } write(pd, "a", 1); semGive(semMID); close(pd); }

VxWorks编程常用函数说明

VxWorks编程常用函数说明
Init() { /* 创建消息队列 */ if ((msgQID = msgQCreate(8, 1, MSG_Q_FIFO)) == NULL) { printf("Message queue create failed!\n"); } }
taskSend() { if (OK != msgQSend(msgQID, "A", 1, NO_WAIT, MSG_PRI_NORMAL)) { printf("Message send failed!"); } }
} } /* } */ }
四、多任务环境的编程: 1、任务控制:taskLib.h taskSpawn( ) - 创建任务 taskInit( ) -初始化任务,用户自己指定栈和 PCB 地址 taskActivate( ) - 激活已经初始化的任务 exit( ) - 在任务中结束 (ANSI) taskDelete( ) - 删除任务 taskDeleteForce( ) - 强制删除,即使被保护 taskSuspend( ) - 挂起任务 taskResume( ) - 恢复挂起的任务 taskRestart( ) - 重新启动任务 taskPrioritySet( ) - 改变任务优先级 taskPriorityGet( ) - 读取任务优先级 taskLock( ) - 禁止任务调度 taskUnlock( ) - 允许任务调度 taskSafe( ) - 保护任务不被删除 taskUnsafe( ) - 解除保护 taskDelay( ) - 延时 taskIdSelf( ) - 得到当前任务的 ID taskIdVerify( ) - 任务 ID 是否存在 taskTcb( ) - 得到任务控制块(TCB)的地址 taskOptionsSet( ) - 改变任务选项 taskOptionsGet( ) - 得到任务当前选项 taskRegsGet( ) - 得到任务 TCB 中寄存器的信息 taskRegsSet( ) - 设定任务 TCB 中寄存器的信息 taskName( ) - 得到任务名称 taskNameToId( ) - 由名称得到 ID taskIdDefault( ) - 设置默认的任务 ID taskIsReady( ) - 任务是否就绪 taskIsSuspended( ) - 任务是否挂起 taskIdListGet( ) - 得到活动的任务列表

VxWorks常用命令汇总

VxWorks常用命令汇总

VxWorks常⽤命令汇总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、8m addr,[width] -按width宽度修改addr地址的内容,width可以是1、2、4、8 memShow 1 -显⽰系统分区上空闲和已分配空间的总数等printErrno value -打印系统定义的错误码的宏3、与⽹络相关的命令ifShow ["ifname"] - show info about network interfacesinetstatShow - show all Internet protocol socketstcpstatShow - show statistics for TCPudpstatShow - show statistics for UDPipstatShow - show statistics for IPicmpstatShow - show statistics for ICMParpShow - show a list of known ARP entriesmbufShow - 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 statisticsrouteAdd "destaddr","gateaddr" - add route to route tablerouteDelete "destaddr","gateaddr" - delete route from route table说明:上述⼤多数命令都可以在help、netHelp中查到vxWorks命令规则:名词+动词,第⼆个单词开始⼤写序号状态命令备注1 BSP c 改变配置2 BSP p 打印当前配置信息3 BSP @ 开始加载内核4 BSP ctrl+x 重新启动5 BSP6 BSP7 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 "xx.xx.xx.xx",10,0 ping地址xx.xx.xx.xx,共计10次24 vxWorks pciDeviceShow 查看当前系统中的所有PCI设备25 vxWorks pciHeaderShow,0,xx 查看当前系统中的组号为0、地址号为xx 的PCI设备VxWorks中如果稍有不慎,就可能导致task suspend,如果运⽓好,shell没有被挂起,则可以通过系统的⼀些命令追踪⼀下挂起的原因。

vxworks系统及函数详解

vxworks系统及函数详解

VxWork介绍及编程VxWork介绍及编程一.嵌入式操作系统VxWorks简介VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。

良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。

它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。

在美国的F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。

实时操作系统和分时操作系统的区别从操作系统能否满足实时性要求来区分,可把操作系统分成分时操作系统和实时操作系统。

分时操作系统按照相等的时间片调度进程轮流运行,分时操作系统由调度程序自动计算进程的优先级,而不是由用户控制进程的优先级。

这样的系统无法实时响应外部异步事件。

实时操作系统能够在限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。

分时系统主要应用于科学计算和一般实时性要求不高的场合。

实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。

VxWorks的特点•可靠性操作系统的用户希望在一个工作稳定,可以信赖的环境中工作,所以操作系统的可靠性是用户首先要考虑的问题。

而稳定、可靠一直是VxWorks的一个突出优点。

自从对中国的销售解禁以来,VxWorks以其良好的可靠性在中国赢得了越来越多的用户。

•实时性实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件作出响应的能力。

实时性的强弱是以完成规定功能和作出响应时间的长短来衡量的。

VxWorks 的实时性做得非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,它们造成的延迟很短。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、官方的 Program Guide 位于安装目录下:\docs\vxworks\guide\index.html 二、常用的库: #i nclude "taskLib.h" /* 任务 */ #i nclude "msgQLib.h" /* 消息队列 */ #i nclude "semLib.h" /* 信号量 */ #i nclude "ioLib.h" /* IO */ #i nclude "wdLib.h" /* Watch dog */ #i nclude "logLib.h" /* 信息输出 */ #i nclude "socket.h" /* 网络套接字 */ 三、IO 系统:ioLib.h 1、系统中的 IO 设备,包括键盘、串口、文件等,都用统一的接口访问。第一步通常先得到文 件描述符,然后进行读写或者设置的工作,最后关闭该描述符。 creat:建立文件 open:得到文件或设备的描述符 read:读文件或设备 write:写文件或设备 ioctl:设置参数 close:关闭文件描述符 remove:删除文件 2、内存文件 memDrv( ) - 初始化伪内存设备 memDevCreate( ) - 建立伪内存设备 memDevCreateDir( ) - 建立一组伪内存设备 memDevDelete( ) - 删除伪内存设备 Init() { uchar_t buffer[1024]; int fd; memDrv( ); memDevCreate("/mem/mem1", buffer, sizeof(buffer)); if ((fd = open("/mem/mem1", O_RDWR, 0644)) != ERROR) { write(fd, &data, sizeof(data)); ... ... close(fd); } memDevDelete("/mem/mem1"); } 3、通过 Select 函数实现多个 IO 监听:selectLib.h 当等待多个 IO 时,我们可以使用 Select 函数,fd 为文件描述符:
Байду номын сангаас
Init() { /* 创建消息队列 */ if ((msgQID = msgQCreate(8, 1, MSG_Q_FIFO)) == NULL) { printf("Message queue create failed!\n"); } } taskSend() { if (OK != msgQSend(msgQID, "A", 1, NO_WAIT, MSG_PRI_NORMAL)) { printf("Message send failed!"); } } taskReceive() { uchar_t ch; msgQReceive(msgQID, &ch, 1, WAIT_FOREVER); /* 这里任务会阻塞 */ printf("Received from msgq: %c ", ch); } 2)管道:ioLib.h,系统默认包含了 pipe 驱动组件 pipeDevCreate( ) - 创建管道 pipeDevDelete( ) - 删除管道 由于管道属于 IO,所以可以使用 Select 监听,消息队列不是 IO,不能使用 Select Init() { /* 创建管道 */ if (pipeDevCreate("/pipe/mypipe", 8, 1) != OK) { printf("/pipe/mypipe create fialed!\n"); } /* 创建互斥信号量 */ if ((semMID = semMCreate(SEM_Q_FIFO)) == NULL) { printf("Mutex semaphore create failed!\n"); } } taskSend() { int pd; /* pipe 的描述符 */ if ((pd = open("/pipe/mypipe", O_WRONLY, 0644)) == ERROR) { printf("Open pipe failed!"); } if (semTake(semMID, NO_WAIT) == ERROR) { printf("Pipe in use!");
} write(pd, "a", 1); semGive(semMID); close(pd); } taskReceive() { int pd; /* pipe 的描述符 */ uchar_t ch; if ((pd = open("/pipe/mypipe", O_RDONLY, 0644)) == ERROR) { printf("Open pipe failed!"); } if (read(pd, &ch, 1)>0) { /* 这里任务会阻塞 */ printf("Received from pipe: %c", ch); } } 3)二进制信号量 Init() { /* 创建二进制信号量 */ if ((semBID = semBCreate(SEM_Q_FIFO, SEM_EMPTY)) == NULL) { printf("Binary semaphore create failed!\n"); } } taskSend() { semGive(semBID); } taskReceive() { semTake(semBID, WAIT_FOREVER); /* 这里任务会阻塞 */ } 4)事件:eventLib 发送事件要指定目标任务的 ID eventReceive( ) - 等待事件 eventSend( ) - 发送事件 eventClear( ) - 清除当前任务的事件. taskSend() { if (OK != eventSend(taskReceiveID, 0x00000001)) { printf("Event send failed!"); } }
taskReceive() { UINT32 Ev; if (OK!=eventReceive(0x00ffffff, EVENTS_WAIT_ANY, WAIT_FOREVER, &Ev)) { printf("eventReceive Error!\n"); } else { Ev &= 0x00000001; if (Ev) { printf("Event %d received!", Ev); } } } 五、Watch dog :wdLib.h 系统提供了软看门狗定时器,使用也简便: wdCreate( ) - 创建看门狗 wdDelete( ) - 删除 wdStart( ) - 启动 wdCancel( ) - 停止 Init() { /* 创建看门狗 */ if ((wdID = wdCreate()) == NULL) { printf("Watch dog create failed!\n"); } } task() { if (OK != wdStart(wdID, sysClkRateGet()*5, proc_wd, 0)) { printf("Watch dog start failed!\n"); } } int proc_wd(int param) { logMsg(... ...); } 六、网络编程:sockLib.h 使用标准的 BSD Socket 套接字,使用 TCP 或者 UDP 协议进行通讯。 socket( ) - 打开套接字 bind( ) - 与端口、地址等绑定 listen( ) - 监听模式 accept( ) - 允许对方的连接
taskSuspend( ) - 挂起任务 taskResume( ) - 恢复挂起的任务 taskRestart( ) - 重新启动任务 taskPrioritySet( ) - 改变任务优先级 taskPriorityGet( ) - 读取任务优先级 taskLock( ) - 禁止任务调度 taskUnlock( ) - 允许任务调度 taskSafe( ) - 保护任务不被删除 taskUnsafe( ) - 解除保护 taskDelay( ) - 延时 taskIdSelf( ) - 得到当前任务的 ID taskIdVerify( ) - 任务 ID 是否存在 taskTcb( ) - 得到任务控制块(TCB)的地址 taskOptionsSet( ) - 改变任务选项 taskOptionsGet( ) - 得到任务当前选项 taskRegsGet( ) - 得到任务 TCB 中寄存器的信息 taskRegsSet( ) - 设定任务 TCB 中寄存器的信息 taskName( ) - 得到任务名称 taskNameToId( ) - 由名称得到 ID taskIdDefault( ) - 设置默认的任务 ID taskIsReady( ) - 任务是否就绪 taskIsSuspended( ) - 任务是否挂起 taskIdListGet( ) - 得到活动的任务列表 2、任务互斥 - 信号量:semLib.h semGive( ) – 释放一个信号量 semTake( ) – 获取一个信号量,会阻塞 semFlush( ) – 使所有阻塞在本信号量上的任务变为就绪状态 semDelete( ) – 删除一个信号量 1)二进制信号量:semBCreate 可用于任务同步和互斥,但常用于任务同步 2)互斥信号量:semMCreate 专门用于任务互斥的信号量,保护临界资源 3)计数信号量:semCCreate 多实例资源的访问控制 3、任务同步 1)消息队列:msgQLib.h 消息队列 msgQCreate( ) - 创建消息队列 msgQDelete( ) - 删除消息队列 msgQSend( ) - 发送消息 msgQReceive( ) - 接受消息,调用后阻塞 msgQNumMsgs( ) - 得到消息队列中的消息数量
相关文档
最新文档