vxWorks FAQ中文版收藏-转载之下

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");
     }

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值