⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vxworks faq.txt

📁 VxWorks中文教程
💻 TXT
📖 第 1 页 / 共 5 页
字号:
      ioGlobalStdSet(STD_OUT,STDFd);

   }
   close(outFileFd);
   return (rtn);
}
(From: RonnoBonno, RHNAssociates@yahoo.com)

2.9.10 怎样检查静态变量?
A:在映象上执行nmxyz,并提出变量地址,你可以随后导出它的内容。
#> nmppc vxWorks | grep ftpsActive
0023dc60 d ftpsActive
(From: Toni Kurzberger, gonozal@gmx.at)





2.10 Telnet
参看5.7
2.11 Tornado
2.12 版本控制
2.13 可视化集成
2.14 Windsh
2.15 WindView


3.BSP FAQ
3.1 不同BSP
3.2 处理器
3.2.1 Power PC
3.2.1.1 问题关于MPC860BSP(新手上路):在读前辈程序的时候遇到这样一些语句: 
lis r3, 0x0090 
ori r3, r3, 0x0000 #plp=9, 50M clk 
stw r3, PLPRCR(r4) #PLPRCR 
不知道LIS、ORI、STW是什么语言?望指教!谢谢 
A:是PowerPC汇编, 
lis r3, 0x0090 ;放数据0x0090到r3 
Rejoicer:应该将立即数附给r3,然后左移位,注意,低位就为0 
ori r3, r3, 0x0000 #plp=9, 50M clk ;后两数之间取"或"放入前面r3 
Rejoicer:r3低位或0x00(立即数) 
stw r3, PLPRCR(r4) #PLPRCR ;PLPRCR(r4)按位右移#PLPRCR,放入r3 
Rejoicer: 将r3的内容写到 地址 r4 + PLPRCR 指向的寄存器(PLPRCR寄存器)中,(估计r4放的IMMR值)

3.2.1.2 如果要在mpc860上加一个硬盘,用什么方法呢? 谢谢! 
A:你加一个网络文件系统,然后通过网络文件系统可以访问你机器的硬盘

3.2.1.3 mpc860在下载中遇到的问题,我用veisionice仿真器下载程序的时候,发现程序老是下不下去。
在检查中,我发现CLKOUT只有1。25M。我用的是外围5M晶体振荡器,MODCK [1-2] 设置为10。[MF+1]为8。
我的主频是40M。应当说在没有程序运行的情况下,CLKOUT应该为5M。这是怎么回事?请大家指教。 
A:clkout的输出(输入CLK的分频系数)也是通过860的一个寄存器配置来得到的,你可以查一下860的相关
的寄存器看一下。

3.2.1.4 860中的程序调用,在860的BSP文件 romInit.s中,在程序末尾有条指令是跳转到 romStart(),
在这之前有个计算 romstart() 入口地址的公式. 
romstart入口地址= romstart - romInit + ROM_TEXT_ADRS 
我对这个公式的理解不是很明白,谁能解释一下,在汇编里调用某个C函数,那该怎么来实现或\ 
计算跳转地址.单独在一个汇编程序里,我可以理解,但一个汇编调用一个C程序我糊涂了 
who can help me ? thanks 
A:可以这样理解ROM_TEXT_ADRS=romInit,这样则romstart=romstart,上述些方式为了防止ROM_TEXT_ADRS
不等于romInit情况下,还能得到正确的romstart地址. 这里不涉及C程序还是汇编程序.只是传了一个
地址.romstart已在前面声明为一个外部函数. 原标号只是相对地址,不信你自己跟一下,或查看一下生成
的bootrom.bin文件,分析一下机器码你所提到的三个地址:romInit,romStart,ROM_TEXT_ADRS,其实只有
第三个是绝对地址,前两个都只是标号,也即相对地址.在romIinit.s中由于取指令还得从NVRAM中取,
所以必须用绝对地址,那么romStart的绝对地址在哪里呢?只有算一算了,我们只知道romInit肯定是在
ROM_TEXT_ADRS所标识的地址,而且肯定是bootRom目标程序中的最低地址,所以romStart的绝对地址是
(romStart - romInit) + ROM_TEXT_ADRS

3.2.1.5 vxworks下,是否有api可以获取网卡mac地址呢?
A1:如果是MPC860,可以试一下这个函数 
char macBuffer[8]; // MAC地址 
sysCpmEnetAddrGet(0, macBuffer); 
或直接读网卡MAC地址的寄存器. 
A2:为什么一定要用api呢, 
不管是860 scc 口,还是8260 Fcc口,都可以读参数区的PADDR1_H,-M -L得到嘛, 
如果你是做BSP的,一般都会从利用这个变量unsigned char sysFccEnetAddr [6] 
syslib.c 
A3:vxworks操作系统是通过BSP来了解自己的网口地址的,具体说是通过系统函数sysCpmEnetAddrGet(),
这个函数属于BSP的范畴,它的函数实现是可以修改的。


3.2.2 I960
3.2.3 MIPS
3.2.4 ARM
3.2.5 x86
3.2.4.1 请问在Vxworks for x86下怎么读取BIOS的信息,请教各位大侠,
在Vxworks for x86下怎么读取目标机BIOS的信息?我现在想得到目标机的工作状态,
如目标机CPU的温度,以及风扇的转速,看门狗等。我采用的目标机是ADLINK公司的NuPP0-760,
在系统启动时,加入BIOS可以看到这些信息,但是请问我如何在我自己编写的程序中动态得到这些参数值?
多谢各位大侠了!! 
A:似乎比较困难。
关键是BIOS运行在实模式下,而VxWorks运行在保护模式下;并且VxWorks起来后,BIOS就不存在了。
另外我们买主板的时候,似乎都不带什么主板编程手册之类的东西,否则直接读写主板上的寄存器应该就
可以了。(by vxfree)
我曾经用sysinbyte()和sysoutbyte()读BIOS中的内容,用0X70和0X71,相关的地址你可以参考硬件手册.
(by dongdd)

3.3 Bootstrap
3.4 配置你的VxWorks
3.5 VME
3.6 VxWorks环境 environment
3.6.1 usrSerial.c
3.6.2 prj_vxworks.tcl
3.7 PCI
3.7.1 关于PCIPCI总线上的设备怎么查找?是用pciFindDevice()函数吗?如何映射PCI内存?如何读
PCI设备内存中的内容?谢谢
A:使用pciFindDevice查找设备;使用pciConfigInByte/Word/Long, pciConfigOutByte/Word/Long读写配置
空间;修改sysLib.c::sysPhysMemDesc[]映射地址空间;使用pciIntConnect连接PCI中断(也可以使
用intConnect)。 

4.文件系统 FAQ
4.1 Dos文件系统

4.1.100 如何从dos的root directory读出的32字节中算出文件建立时间?
我现在用的是fat16,并可以从root directory中读出文件最后一次修该时间的16进制数,
但是如何从这个16位的数中算出文件最后一次修改的时间,我怎么都弄不明白,
还请高手指教,或者相关资料去那里找?
A:32字节中,偏移量为16H的代码意义(2字节):时间=小时*2048+分钟*32+秒+2
偏移量为18H的代码意义(2字节):日期=(年份-1980)*512+月份*32+日
(by zongj)
 

4.2 Flash文件系统
4.3 Floppy-disk文件系统
4.4 RAM-disk文件系统
4.5 基本文件系统问题


5.网络 FAQ
5.1 配置问题
5.100 如何在VxWorks下配置双网卡?
A:以NE2000双网卡为例
NE2000(5,0X320)和NE2000(9,0X300)
 BSP如下配置:
 bsp\config.h:
    #define IO_ADRS_ENE           0x320
    #define INT_LVL_ENE           0x05

    #define IO_ADRS_ENE1          0x300
    #define INT_LVL_ENE1          0x9
    #define INT_VEC_ENE1          (INT_VEC_GET (INT_LVL_ENE1))

 bsp\confignet.h:
    #ifdef INCLUDE_ENE_END
    {0,END_ENE_LOAD_FUNC,END_ENE_LOAD_STRING,END_ENE_BUFF_LOAN, NULL, FALSE},
    {1, END_ENE_LOAD_FUNC,END_ENE_LOAD_STRING, END_ENE_BUFF_LOAN, NULL, FALSE},
    #endif /* INCLUDE_ENE_END */

 bsp\sysNe2000End.c
     if (pParamStr[0] == '0')
         sprintf (cp, ne2000ParamTemplate,
                          IO_ADRS_ENE,
                          INT_VEC_ENE,
                          INT_LVL_ENE,
                          ENE_BYTE_ACCESS,
                          ENE_USE_ENET_PROM,
                          ENE_OFFSET);
     else if (pParamStr[0] == '1')
         sprintf (cp, ne2000ParamTemplate,
                          IO_ADRS_ENE1,
                          INT_VEC_ENE1,
                          INT_LVL_ENE1,
                          ENE_BYTE_ACCESS,
                          ENE_USE_ENET_PROM,
                          ENE_OFFSET);

     printf ("ne2000EndLoad: %s.\n", paramStr);
     if ((pEnd = ne2000EndLoad (paramStr)) == (END_OBJ *)ERROR)
     {
      printf ("Error: NE2000 device failed ne2000EndLoad routine.\n");
     }

In the Project Menu, find the object name IP_MAX_UNITS, change it to 2. and build it .

 使用ipAttach和usrNetIfConfig setup the second network cards.
 
 
5.2 ARP
5.3 DHCP
5.4 FTP和TFTP
5.5 PPP
5.5.1 PPP on Windows 95
5.5.2 PPP on Windows NT
5.5.3 PPP on Solaris
5.6 Sockets
5.7 Telnet
5.8 SNMP
5.8.1 利用snmp协议开发网络管理软件,谁能帮忙说一下利用snmp协议开发网络管理软件的流程。mib这个库
还需要自己写程序维护吗?另外,是不是做网络管理软件只需要开发一个client把网络单元所有的信息收集
起来进行分析就可以了?本人是这方面的新手。望指教!
A:MIB库是嵌在硬件设备里的,由OEM提供,不需要自己写程序维护,SNMP软件开发主要是安SNMP协议的定义编
程对硬件设备参数进行设置(IP等),信息查询(工作状态..),信息接收(出错...)等. 
一般不需要对这些信息分析,只是显示出来即可.如一个用户要用打印机打印,查询打印状态,会知道该打印机
是否繁忙.如打印机不工作,会给客户端显示原因(塞纸等).可以为打印机设置IP,语言支持等. 

再问:由谁能否为我解释一下SNMP中的OID是如何定义的?我如何得到相关的信息? 
A:
OID是MIB树上面的节点,形如1.3.6.1.2.1.....每个数字表示MIB树的一层,向下递推. 
MIB分两种,一种是标准MIB,是有国际标准的MIB-1,MIB-2,可查看RFC文档,另一种是私有MIB,有设备生产商定
义提供. 



5.9 其它网络相关问题

5.9.100 VxWorks下ping局域网为何不通?
我使用Tornado2 prototyper for NT,在NT4的环境调试。已按要求安装了ULIP,地址"90.0.0.254".建立一
个bootable Imag project,并加载了网络组件,包括PING。 
在shell下调试,ping "90.0.0.254",4,0      ping "90.0.0.1",4,0  均正常,但ping我的局域网就是不
通,没有应答。哪位同志帮帮我,谢谢了!  
A: ping的时候,因为它需要ULIP转发,要在两边的机器上用ROUTE ADD增加路由表,以对方的网卡做路由,并将
IP FORWARDING选中.(by besea)

讲讲我的具体设置 
在TCP/IP属性里 
  我的物理网卡地址:168.8.8.6,子网掩码:255.255.0.0     网关地址:168.8.8.66。 
  ULIP虚拟适配器地址:90.0.0.254,子网掩码:255.255.255.0 网关地址:168.8.8.6。(本机) 

在VxWork下,ping 168.8.8.66,用Sniffer抓包看到: 
  source address: 90.0.0.1 
 destination address:      168.8.8.66 
   
我试了一下,只能发包不能收包,收不到ECHO REPLAY 
请大家帮忙解答一下,谢谢!(by explore)


6.VxWorks操作系统 FAQ
6.1 C++ issues

6.1.100 请教Vxworks中类的用法: 
我的程序中包含如下内容,编译时全通过,但下载时显示 
Errors while downloading D:/Tornado/target/proj/simtest/SIMNTgnu/simfun.out: 
___6mytest 
__$_6mytest 
请问各位高人如何处理. 

extern"C" { 
class mytest 
{ 
public: 
mytest(); 
~mytest(); 
int add(int x,int y) 
{ 
return (x+y); 
} 

}; 
mytest tmyt; 
} 

A:一看你的文件名后缀是否为cpp(必须为小写) 去掉语句extern"C" ,文件后缀名改为.cpp!

6.1.101 请教帮主c and c++,tornado支持c and c++ ,但当我用c++写好程序test.cpp,然后想在
srAppinit.c中调用我写好的myFuc();时,不能编译通过。但我把test.cpp改成test.c后则可以通过。这是
为什么? 
A:文件后缀为.cpp时编译器会认为是C++文件,这样有些定义类型为C的函数在编译或下载时不被认可。 
解决方法是把这些不被认可的C类型函数用语句extern "C"说明一下为C函数就行了.


6.2 Communication problems


6.2.100 关于消息队列(Message Queues)
我知道用msgQReseive()从队列中接受信息,用msgQSend()向队列发送信息。但有两个问题: 
  1. 接收到的和发出的是什么信息? 
  2. 如何接收,如何发送?  
A:使用队列接收和发送消息前,要先创建一个队列,这个队列实际上是一个FIFO的管道。发送任务从管道的
一端发送消息,需要取得消息的任务从另一端接收消息。其中msgQReceive是一个阻塞的系统调用,当队列
中有消息时,函数调用取的消息。如果没有消息,则该任务处于等待消息的状态,直到接收到消息,才继续
执行。(by bruin)




6.3 中断(Interrupt)
6.3.1 VxWorks是如何调用ISR的?

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -