2009年4月8日星期三

VirtualBox中串口的设置

在嵌入式开发中使用虚拟机一般都使用Vmware,今天尝试使用Virtualbox。
在虚拟机内需要使用串口时,当真实PC的环境为LINUX时,一般串口地址填写为“/dev/ttyS0”,其中数字0自由定义。
可当外围环境是windows时,我填这个却不对,也应当不对。查了半天中文资料,也没查到该填什么,终于今天在一篇英文文档中发现答案,很简单,填写“COM1”,其中数字1也是根据环境自由定义。

C中数组作为函数行参时默认转换成指针



void fun1(char ca[])
{
printf("fun1:%d,%d,%d,%x,%d\n",ca,&ca,&(ca[0]),ca[4],sizeof(ca));
}

void fun2(char *pa)
{
printf("fun2:%d,%d,%d,%x,%d\n",pa,&pa,&(pa[0]),pa[4],sizeof(pa));
}
main(){
char ca[5]="abcde";
printf("main:%d,%d,%d,%x,%d\n",ca,&ca,&(ca[0]),ca[4],sizeof(ca));
fun1(ca);
fun2(ca);
}




在C中当数组作为参数传递给函数时,数组已一致转换成指针类型,拿这个代码当测试


aax@aax-desktop:~/桌面/test$ ./fun_test
main:-1074369409,-1074369409,-1074369409,65,5
fun1:-1074369409,-1074369456,-1074369409,65,4
fun2:-1074369409,-1074369456,-1074369409,65,4


从结果中可以看到,在main函数里,字符数组ca一直指向的是数组首元素的地址,也就是说ca,&ca打印出的都是数组首元素地址。而当数组当做参数传递给函数是,打印出来的东西变了。
这是因为在函数里数组已经转换成指针类型。
在fun1里,ca打印的是指针指向数组的地址,还是原来数组首元素,而&ca则打印的是指针本身的地址。在这里它同fun2的指针类型一模一样。
同理,sizeof在函数里也失效了。

2009年4月6日星期一

配置gdbserver时的错误

arm-linux-gdbserver的编译安装时,在执行
./configure -- target=arm-linux --host=arm-linux
总是出现C compiler cannot create executables的错误
最后发现是arm-linux-gcc版本的事情,原来时3.2,现在换成3.4.1就OK了~

2009年4月5日星期日

嵌入式开发中Ubuntu下NFS文件系统安装和调试

Ubuntu下NFS文件系统安装和调试---findfunaax
环境:
NFS服务器:虚拟机下Ubuntu8.04(IP:192.192.192.101)
连接端:英倍特目标机Linux(IP:192.192.192.100)

1、安装NFS服务器
首先在虚拟机内安装NFS,在终端内输入命令:
sudo apt-get nfs-kernel-server

2、修改NFS配置文件
-------------------------------------------------------------------------------------------------------------------------------
在终端内输入:
sudo gedit /etc/exports
在打开的文本编辑器内最后添加一行NFS共享目录信息,格式如下:
[分享目录] [主机名称1/ip1 (参数1,参数2)] [主机名称2/ip2 (参数3,参数4)]
例如我的共享目录是/home/aax/NFSdir,可访问主机为任意,添加如下
/home/aax/NFSdir *(rw,sync,no_subtree_check)
保存关闭
-------------------------------------------------------------------------------------------------------------------------------
配置/etc/hosts.deny (禁止任何host(主机)能和你的NFS服务器进行NFS连接)
在终端内输入:
sudo gedit /etc/hosts.deny
加入:
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
保存关闭
-------------------------------------------------------------------------------------------------------------------------------
配 置/etc/hosts.allow 允许那些你想要的主机和你的NFS服务器建立连接。
在终端内输入:
sudo gedit /etc/hosts.allow
加入:
portmap: 192.192.192.
lockd: 192.192.192.
rquotad: 192.192.192.
mountd: 192.192.192.
statd: 192.192.192.
关闭保存


3、重启NFS服务器
sudo exportfs -r
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-kernel-server restart
如果不报错误,就OK了

4、在目标机上输入命令挂载至目录/mnt/nfs,目录必须存在且为空
mount -t nfs 192.192.192.101:/home/aax/NFSdir /mnt/nfs
如果没报错,说明挂载成功

ubuntu 8.04 开机gdm登录前打开小键盘灯(转贴)

原文链接
http://hi.baidu.com/ifellow/blog/item/425e4a36bec917d8a3cc2ba6.html/cmtid/979b7dd9d378f0e139012fac

1,先得装点东西,sudo apt-get install numlockx
2,然后用自己喜欢的编辑器编辑 /etc/gdm/Init/Default 。sudo mousepad /etc/gdm/Init/Default(注意是Init)
3,找到最后一行,在exit 0前一行输入以下内容(原文是查找 exit 0,其实都一样的,就在最后嘛)
if [ -x /usr/bin/numlockx ]; then
/usr/bin/numlockx on
fi
保存就行了,下次开机就会自动开小键盘上的灯!

没有装gdm这样的登录界面而是直接startx进入X的可以编辑
/etc/X11/xinit/xinitrc
并加入
/usr/bin/numlockx on
就OK

2009年4月3日星期五

C语言是不支持按址传递(引用传递)


int a(int& b);

int main()
{
int c = 0;
a(c);
}

开始我用gcc编译 gcc -o main main.c
总是出现错误:
main.c:9: 错误:expected ‘;’, ‘,’ or ‘)’ before ‘&’ token