唐先生等各位专家:
不好意思又要麻烦大家了,请教你们几个串口编程的问题。
1. 请问在qnx里,串口的缓存区的运行机制是什么呢?(可能听着像门外话),具体到我的操作上,比如我想用时钟,每1秒(甚至更长,3-4秒)激发一个子线程读取数据,在程序的开头,指定好buffer为256字节,(或更少,如40字节),接收的baud为38400bps: 如果按这么设置的话,buffer应该很快就读满了,那么当读满之后qnx会怎样处理呢,是不再接收数据了呢,还是继续接收并同时清除早先已存的数据呢,如果是按第二种的话,那么如果以1s/256个字节 的读取速率就不能读到所有的数据了,是吗?
2. 我参考了大家的帖子,也看了一下和我项目有关的论文,对于我follow的idea,其中有几点不懂:
程序框架如下:
Void *periodic_thread(void *arg)
{
int com1, rcv_byte;
byte data[numberofbyte];
system(“device-ser8250, -u1 03f8, 4 &”);
com1= open(“/dev/ser1”, O_RDWR);
initialize_serial(com1, 115kbps, 8bits, istopbit, even_parity);
while
{
Wait_for_condar();
AskData(SENSOR, com1);
rcv_byte = read(com1, data, sizeof(data));
if(rcv_byte = = numberofbyte)
DumpTosharedMemory(data);
Else
SetError(SENSOR);
}
}
一是 byte是什么,从没见过这种数据类型呀
二是 AskData做了什么工作呢,看起来好像是将Sensor的数据读到com1里,先说明一下,这个sensor可以115kbps,每秒50个或更多个包(每个包37个字节,首两个字节为UU,尾两个字节为checksum)的方式传送数据,但是我不明白这一步是作甚么的,因为我觉得open,initial,read,close这几步已经足可以做读数据的工作了,加这一步是为什么呢,希望有类似经验的专家赐教。派生出来的问题是raw 和edit mode的区别,是不是接收数据包用edit mode更理想呢?
三是: initialize 那条命令具体含义是什么呢,一般这种命令不是应该放在system image里面吗?
这样做是不是以中断的方式来接收数据(之所以这样问,是因为不明白irq number: 4的作用)
3. 我试验的程序中,这样display:
Printf(“data is: %X, %X,….”, buffer[1], buffer[2],….), 但是为什么会显示出FFFFFFFD,这种这么多位的数呢,一个字节顶多就显示成FF呀?
问题很愚,希望xtang先生等高人指点迷津!!!鄙人感激不尽!!!!