随笔 - 4, 文章 - 0, 评论 - 4, 引用 - 0
数据加载中……

2009年1月13日

在VMWare上安装VxWorks遇到的问题

    我找来了现成的文章,因为我是在一个广告满天飞的不可信任的网站上找到的,而且也没有注明版权,我这里就很方便地直接搬上来了。
    如下:

我也是初学者,根据wabcon2003-12-27的教程在VMWare上安装VxWorks操作系统(原文找不到了),生成的bootrom在VMware中加载出现:
(tBoot): sysNvRamGet:open failed
Attached TCP/IP interface to lnPci0.停在这里不动了。
先说明TCP/IP错误,主要是没有将网络驱动程序加入bootrom中。
解决办法:
先将从AMD下载的网卡驱动中的ln97xEnd.h和ln97xEnd.c复制到pcPentium目录中,然后修改pcPentium中的Makefile文件
将MACH_EXTRA = 改为MACH_EXTRA = ln97xEnd.o
然后编译生成bootrom。此时如果后面的操作都正确,boot已经可以成功了。

open failed错误不影响boot,但是有网友反应会影响到以后的开发,以后还是应该解决掉。解决的方法也很简单,就是修改config.h文件将
#define SYS_WARM_TYPE  SYS_WARM_FD  改为
#define SYS_WARM_TYPE  SYS_WARM_BIOS

Build Boo ROM的时候不支持C++语法,即//的注释符不能被正确解析。
环境变量的设置只是临时的,关闭控制台之后需要重新设置环境变量。
mkboot a: bootrom 在a:后面有个空格。

就这么多了,欢迎大家和我交流。Have Fun!
————————————————————————————————————————————————
    这个问题相信很多人会遇到,就放这里希望有人可以查到吧!还有上面(tBoot): sysNvRamGet:open failed这个问题。直接在磁盘上建立一个以“nvram.txt” 命名的txt文件就ok了。如果你想知道为什么,那就看下面的描述,国际友人写的。
> Hi,
>
> I am using VxWorks 5.5 for target machine Pentium II.  When the system
> boots up, VxWorks gives a message as:
>
> 0x2a7a8c(tBoot): sysNvRamGet: open failed

Second attempt:

now I see what is going on.  The very first time after building the
boot diskette, the file nvram.txt with the boot parameters, is not
there yet.  So this system call tries to open this file and fails.
After you supply the boot parameters by hand, they are written to this
file, and the next time you boot after that, the error message should
not happen.

So, this error message should not cause any problems. 

Mark Galecki

posted @ 2009-01-13 06:33 扫地僧 阅读(2102) | 评论 (2)编辑 收藏

2009年1月5日

迷糊的多维数组的地址

 

        为什么要写这个?因为这个东西有点混乱,至少我第一次接触的时候是这样的。或许以后还会,所以记下来需要的人一起看吧。

        直接上主题,我做事就是很直接,当然也会很啰嗦,下面你将会一并体验到。

int count[2][3] = {{1,2,3},{4,5,6}};

count //数组count[0][0]的地址。

count+1//数组count[0][0]行数的偏移量为1的地址,即count[1][0]的地址。

*(count+1)//等效于count+1。

*(count+1)+1//count[0][0]行数偏移量为1,列数偏移量为1的地址,即count[1][1]的地址。

**(count+1)//count[1][0]的值。注意这里是2个“*”。

*(*(count+1)+1)//count[1][1]的值,这里也可以写成**(count+1)+1,结果都是一样的,反正就是要2个“*”。说到这里有的人可能就觉得奇怪了,上面不是说了“*(count+1)//等效于count+1”那*(*(count+1)+1)能不能写成*((count+1)+1)呢?答案是很肯定的:不能。为什么呢?我的理解是:如果单纯地表示行地址的时候有无“*”都无所谓,反正是一行的地址,同时也是一行的第一列元素的地址。*(*(count+1)+1)含义是先取得第1行的地址,然后再在第1行内偏移1列后,取得地址所存储的值4。如果写成*((count+1)+1)则含义变成:行数偏移1后再偏移1后的地址。
       这里有点饶头,多看几次就会明白了。当然按照我的理解来看也是有一定风险的,因为我可能理解错了。不过这些结果我都试验过的,绝对不会错的。

*(count+1)[1]//count[1][1]的值。首先用*(count+1)取得行地址,然后用[1]直接获取这个地址中第1号元素的值。这个表达式等效于*(count[1]+1),同时也等效于*(*(count+1)+1)。~~扑通~~已经有人彻底晕倒了。这里的“*(count+1)”,“count[1]”都是为了有效地进行行地址定位,因为只有先找到行地址才能进列定位嘛!

最后总结:

1.    如果你是想获得多维数组中一行的地址则使用不使用“*”都无所谓。前提是没有“[]”出现。

2.    如果你是想获得多维数组中元素的地址则首先得确定好此元素的行地址(使用“*”,比如*(count+1)这样就确定了是第1行的地址),然后再进行列偏移。

3.    如果你是想获得多维数组中元素的值,则可以在地址之前加“*”一般整个表达式是2个“*”,因为确定某一行的时候的那个“*”是必不可少的。当然也可以使用带有“[]”的方式,这个方式里面需一个“*”和一个“[]”就可以获得数组的值。如果你说使用count[1][1]这样的方式不是更好么?你说的一点都没错,不过我这里主要讨论的是与地址相关的内容。不过要顺带说一下如果使用双“[]”的情况下表达式前加不加“*”都是无所谓的。

再一次总结:

1. 多维数组的地址中,重点就是进行行地址定位,有2种方式,第一种:加“*”eg:*(count+1)。第二种:使用“[]”eg:count[1]。
       这里有一个问题啊,* count[1]是地址还是值啊?如果你的回答是地址那请再回头看一下最后总结第一条。这里的* count[1]表示的是一个值,因为这条语句的含义是取count[1]的值,可是count[1]只是一个地址,只进行了行定位,偏要它交出一个值出来,只好把列排名第一的第0个元素丢了出来,即count[1][0]。

学生朋友应付考试的总结:
1. 单个“*”或单个“[]”可以获得地址;双“*”或双“[]”或一个“*”加上一个“[]”可以获得数组值。这样的规律是不是很简洁明了?

 错误不足之处还请大家多多指正!谢谢!

posted @ 2009-01-05 02:25 扫地僧 阅读(462) | 评论 (3)编辑 收藏

2008年12月31日

指针 第一印象

1.指针怎样声明?

  使用* 比如int* a;

2.指针中存放的是什么呢?

  指针中存放的是地址。比如 int* a = NLL; int b = 0; a = &b;

  例子中把b的地址给了int型指针a。&符号是用来获得任何变量地址的,这里变量b的地址就是&b。

  那b的地址的值是多少呢?这个是内存中分配的,每次都可能不一样。

  这里还需要注意的是变量的类型必须和指针的类型一致才可以把变量的地址放入指针中去。

3.指针中的地址的值如何获取?

  同样是*这个符号,比如我们要获取指针a的值,直接*a就可以了。

  比如*a+1 结果为1。如果写成a+1就是不正确的了,得出的结果就是a中的内存地址加上1后的那块内存地址了。

  但是特别的是,如果你定义成 char *string = “Hello world!”;直接string获得的值并不是地址而是“Hello world!”。

  为什么呢?因为输出操作把char*当成char数组来对待。

4.什么是指针数组?

  说白了讲就是数组的中存放的是指针。

  比如char  *strChar[] = {“123”,”1234”,”12345”}; 则strChar[0]中存放的是”123”地址的值,以此类推。

  但是这里虽然存放的是地址的值,但是可以直接用strChar[0]取得”123”。

posted @ 2008-12-31 15:25 扫地僧 阅读(238) | 评论 (0)编辑 收藏

2008年12月18日

Platform Builder NLS data compression utility 已经停止工作(问题解决)

      现象:vs2005下新建了一个OSdesign工程,在属性页中的[Locale]:Locales中同时选中了中文(繁体,台湾)和中文(简体,中国),Default locale:中文(简体,中国)。结果编译到最后的时候出现:Platform Builder NLS data compression utility 已经停止工作的错误。
     解决方法:去掉了中文(繁体,台湾)的选项。
     原因:编码问题。(参考:http://support.microsoft.com/kb/232901/ja (日语))

posted @ 2008-12-18 21:06 扫地僧 阅读(403) | 评论 (0)编辑 收藏