请教唐先生,PC104总线接口的非智能CAN卡的寄存器如何进行读写?

具体是这样,CAN卡需要4KB的地址空间,这个空间是由相应的段地址和偏移组成的,比如段地址是0xDA00,那么CAN控制芯片的控制寄存器的地址就是0xDA00:00000000,命令寄存器的地址就是0xDA00:00000001。等等。现在我需要对这些寄存器进行读写操作。使用了如下的代码:




unsigned char v,addr = 0;
unsigned char far *ptr;
unsigned int gSeg = 0xDA00;

ptr = MK_FP(gSeg,addr);

//读操作
v = *ptr;
//写操作
*ptr = v;

当程序执行到v = *ptr;这一行的时候就会出现内存访问错。

所以请教唐先生我的做法是否正确,应该怎么访问这个内存呢?

QNX4 ? 在Compile/Link的时候加 -T1

是的,是4.25版本的,我的编译命令是这样:cc -T1 -zu -Wc -g -o can can.c
分别去掉-T1, -zu, -Wc 我也都试过,结果是一样的。

我使用的是一种嵌入式的主板,其上带PC104总线扩展接口,这块CAN卡就是插在这个扩展接口上。就是想请问xtang先生,访问这类的扩展卡上的内存的方法应该是怎样的?我上面使用的那种方式正确吗?

我不记得还有别的什么设定了,除了-T1。

你或者可以试试 0xA0000能不能Access,那是显示缓冲,应该可以在console上看到效果。