void task1(void)
{
#ifndef COM_OPEN
fd = open("/tyCo/0",O_RDWR,0);
if(fd == ERROR)
{
return ERROR;
}
ioctl(fd,FIOSETOPTIONS,OPT_RAW);
ioctl(fd, FIOFLUSH,0);
setBaud(fd,COM0_BAUD);
setOption(fd,8,1,0);
#define COM_OPEN
#endif
while(1)
{
...
}
}
void task2(void)
{
#ifndef COM_OPEN
fd = open("/tyCo/0",O_RDWR,0);
if(fd == ERROR)
{
return ERROR;
}
ioctl(fd,FIOSETOPTIONS,OPT_RAW);
ioctl(fd, FIOFLUSH,0);
setBaud(fd,COM0_BAUD);
setOption(fd,8,1,0);
#define COM_OPEN
#endif
while(1)
{
...
}
}
void task3(void)
{
#ifndef COM_OPEN
fd = open("/tyCo/0",O_RDWR,0);
if(fd == ERROR)
{
return ERROR;
}
ioctl(fd,FIOSETOPTIONS,OPT_RAW);
ioctl(fd, FIOFLUSH,0);
setBaud(fd,COM0_BAUD);
setOption(fd,8,1,0);
#define COM_OPEN
#endif
while(1)
{
...
}
}
如果其中任意一个任务退出或重启了,那么串口是不是需要再次打开?任务退出或重启时,串口会不会被操作系统自动关闭?因为3个任务开始只在任意进程里打开1次串口,是否还需要在各个进程的while(1)里再加上预防串口关闭的操作(也就是再次打开)?其中各个进程里对fd采取了互斥或同步操作
这个问题对我比较重要,还请哪位兄弟指点一下,拜谢!
7 个解决方案
#1
友情UP~!
#2
帮顶了……
#3
task1 打开并初始化,task2/task3 打开并使用,注意互斥与同步!
#4
多次打开?这样是不是不大好?根据驱动支持的吧
要是驱动不支持多次打开不就挂了
要是驱动不支持多次打开不就挂了
#5
如果其中任意一个任务退出或重启了,那么串口是不是需要再次打开?任务退出或重启时,串口会不会被操作系统自动关闭?
==============================================================================================
文件描述符表是属于进程的,进程退出时,会关闭所有打开的文件。串口设备文件当然不例外。
==============================================================================================
文件描述符表是属于进程的,进程退出时,会关闭所有打开的文件。串口设备文件当然不例外。
#6
楼主的程序思路是有问题的。
task1/2/3各自打开文件得到的描述符,是进程私有的。不能被其他进程(子进程除外)使用。
而且用条件编译控制串口的打开,也是有问题的。因为task1/2/3的执行顺序和编译顺序是不同的。
task1/2/3各自打开文件得到的描述符,是进程私有的。不能被其他进程(子进程除外)使用。
而且用条件编译控制串口的打开,也是有问题的。因为task1/2/3的执行顺序和编译顺序是不同的。
#7
那应该怎么安排呢?每个进程分别打开串口,然后进行操作?
这样对串口多次打开,3个文件描述符分别使用,即使有互斥与同步,应该也是有问题的吧
当一个进程推出,而其他两个进程正在使用该串口,这样的话那两个进程不也就出错了吗?请LS的兄弟给分析一下,谢谢!
如有可能给出简单的代码示例更好...
这样对串口多次打开,3个文件描述符分别使用,即使有互斥与同步,应该也是有问题的吧
当一个进程推出,而其他两个进程正在使用该串口,这样的话那两个进程不也就出错了吗?请LS的兄弟给分析一下,谢谢!
如有可能给出简单的代码示例更好...
#1
友情UP~!
#2
帮顶了……
#3
task1 打开并初始化,task2/task3 打开并使用,注意互斥与同步!
#4
多次打开?这样是不是不大好?根据驱动支持的吧
要是驱动不支持多次打开不就挂了
要是驱动不支持多次打开不就挂了
#5
如果其中任意一个任务退出或重启了,那么串口是不是需要再次打开?任务退出或重启时,串口会不会被操作系统自动关闭?
==============================================================================================
文件描述符表是属于进程的,进程退出时,会关闭所有打开的文件。串口设备文件当然不例外。
==============================================================================================
文件描述符表是属于进程的,进程退出时,会关闭所有打开的文件。串口设备文件当然不例外。
#6
楼主的程序思路是有问题的。
task1/2/3各自打开文件得到的描述符,是进程私有的。不能被其他进程(子进程除外)使用。
而且用条件编译控制串口的打开,也是有问题的。因为task1/2/3的执行顺序和编译顺序是不同的。
task1/2/3各自打开文件得到的描述符,是进程私有的。不能被其他进程(子进程除外)使用。
而且用条件编译控制串口的打开,也是有问题的。因为task1/2/3的执行顺序和编译顺序是不同的。
#7
那应该怎么安排呢?每个进程分别打开串口,然后进行操作?
这样对串口多次打开,3个文件描述符分别使用,即使有互斥与同步,应该也是有问题的吧
当一个进程推出,而其他两个进程正在使用该串口,这样的话那两个进程不也就出错了吗?请LS的兄弟给分析一下,谢谢!
如有可能给出简单的代码示例更好...
这样对串口多次打开,3个文件描述符分别使用,即使有互斥与同步,应该也是有问题的吧
当一个进程推出,而其他两个进程正在使用该串口,这样的话那两个进程不也就出错了吗?请LS的兄弟给分析一下,谢谢!
如有可能给出简单的代码示例更好...