以调试的CANopen I/O模块为例进行说明。
根据对象字典中定义的输入输出变量DI1、DI2、DO1、DO2,PDO同步传输数据如下:
void TestMaster_post_sync(CO_Data* d)
{
DO1++;// 低8位数字输出端口
DO2++;// 高8位数字输出端口
eprintf("MicroMod Digital In: %2.2x\n",DI1);//DI1表示低8位数字输入端口
eprintf("MicroMod Digital In: %2.2x\n",DI2);//DI2表示高8位数字输入端口
}
DO1表示低8位数字输出端口值,unsigned char类型。
DO2表示高8位数字输出端口值,unsigned char类型。
DI1表示低8位数字输入端口,unsigned char类型。
DI2表示高8位数字输入端口,unsigned char类型。
DI1和DI2会打印到串口终端上。
编译调试结果分析
程序修改完成,保存退出。基于RSB-4210 ARM开发板上Ubuntu14.02的系统,编译调试的过程如下:
1)把SD卡插在电脑上,在Ubuntu终端窗口上切换到CanFestival-3-7740ac6fdedc目录下,将修改好的canfestival源代码工程(can_new.tar.gz)压缩打包,并拷贝到SD卡上,拷贝完成后取出SD卡插入ARM板;
2)打开串口工具,在ARM板rivo下启动系统后,输入sudo su(密码是:rivo),切换到root用户下运行;
3)输入fdisk –l命令,查看存储分区情况,如下图所示:
4)输入cd / 命令,切换到根目录下。再输入mount –t vfat /dev/mmcblk0p1 mnt命令,将SD卡的文件系统挂载到mnt(一个空目录)下,现在我们就可以在mnt目录下看见SD卡的文件系统了;
5)输入cp can_new.tar.gz ~/命令,将canfestival源代码工程(can_new.tar.gz)拷贝到Ubuntu系统根目录下,这样下次上电重启后就不用重新挂载了。
6)输入cd 命令,查看该目录下的can_new.tar.gz文件;
7)输入tar xzmvf can_new.tar.gz命令,解压出文件夹CanFestival-3-7740ac6fdedc;
8)输入ip link set can0 type can bitrate 500000 命令,设置通信波特率为500K;
设置波特率之前先关闭can0口,运行ifconfig can0 down,再运行ip link set can0 type can bitrate 500000 命令,再打开can0口,运行ifconfig can0 up 打开can0口。
9)切换到CanFestival-3-7740ac6fdedc目录下,输入命令 ./configure --cc=arm-Linux-gnueabihf-gcc --arch=arm --os=unix --kerneldir=/usr/src/linux-3.5.7 --prefix=$PWD/myinstall --target=unix --can=socket --timers=unix --debug=WAR,MSG 来配置编译工具、编译条件和环境等;
10)输入make clean命令,删除原有的所有编译过的残余文件,只剩下源代码;
11)输入make all命令,选择满足配置条件的文件全部编译;
12)输入 make install命令,将编译好的文件放在myinstall文件目录下;
13)输入cd ~/myinstall/bin 命令,切换到bin目录下;
14)输入./TestMasterMicroMod –h 命令,查看执行该文件的格式如下图所示:
15)根据提示,输入./TestMasterMicroMod -l ../lib/libcanfestival_can_socket.so -i 0x00 -m 0 -M 500K命令,执行TestMasterMicroMod,即可看见canopen I/O模块上输出端口上数据的变化,串口工具上返回的输入端口的数据和PDO、SDO通信的信息如下图所示:
输出的信息可以看出PDO数据传输时的详细信息,输入端口的返回值根据输入端口的接线情况变化而不同。