![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
2.7 工程
2.8 目标机服务器
2.9 Shell
2.10 Telnet
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的范畴,它的函数实现是可以修改的。 |
|