当前位置: 技术问答>linux和unix
200分送了!!!急,小弟急求各位大侠
来源: 互联网 发布时间:2015-09-10
本文导语: 具体的是这样,主程序是一个死循环(在计算数据),这个时候,需要响应串口传过来的数据进行计算 1。需中断响应,这个程序怎么写? 2。我用了termios这个结构,很奇怪的是,可以接收(用信号,听说这个类似DOS...
具体的是这样,主程序是一个死循环(在计算数据),这个时候,需要响应串口传过来的数据进行计算
1。需中断响应,这个程序怎么写?
2。我用了termios这个结构,很奇怪的是,可以接收(用信号,听说这个类似DOS的INT),但是不能够发送,不知道哪里出错了,向串口发送数据是(write(fd,buff,100))这个函数吗?有其他的函数吗?我在DOS下面用的outportb这个,直接对地址发送(outportb(0x3f8,buff,1))Linux下面的outb这个函数是否一样?
3,因为在中断里面需要判断当前串口是发送还是接收,需要直接读取UART寄存器的值,我在DOS下面用如下代码『
adr1 = 0x3f8
cb=inportb(adr1+2);
if(cb==6)
{
inportb(adr1+5);
continue;
}
if(cb==4)//这个时候中断接收数据
{
readserial()
continue;
}
if(cb==2)//这个时候中断发送数据
{
writeserial();
continue;
}
} while((cb & 1)==0); //2
outportb(0x20,0x20);
』
上面这段程序在linux下面如何实现?用outb这个函数可以直接读取吗?关键问题就是如何判断串口寄存器的状态
下面这个是我写的Linux下面的第一个程序,请大家看看,错在哪里呀?只能够接收,不能够发送!!!
程序:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BAUDRATE B38400
#define MODEMDEVICE "/dev/ttyS1"
void readserial();
void writeserial();
void signal_handler_IO (int status);
main() {
int fd,c, res;
struct termios oldtio,newtio;
struct sigaction saio;
char buf[255];
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd
1。需中断响应,这个程序怎么写?
2。我用了termios这个结构,很奇怪的是,可以接收(用信号,听说这个类似DOS的INT),但是不能够发送,不知道哪里出错了,向串口发送数据是(write(fd,buff,100))这个函数吗?有其他的函数吗?我在DOS下面用的outportb这个,直接对地址发送(outportb(0x3f8,buff,1))Linux下面的outb这个函数是否一样?
3,因为在中断里面需要判断当前串口是发送还是接收,需要直接读取UART寄存器的值,我在DOS下面用如下代码『
adr1 = 0x3f8
cb=inportb(adr1+2);
if(cb==6)
{
inportb(adr1+5);
continue;
}
if(cb==4)//这个时候中断接收数据
{
readserial()
continue;
}
if(cb==2)//这个时候中断发送数据
{
writeserial();
continue;
}
} while((cb & 1)==0); //2
outportb(0x20,0x20);
』
上面这段程序在linux下面如何实现?用outb这个函数可以直接读取吗?关键问题就是如何判断串口寄存器的状态
下面这个是我写的Linux下面的第一个程序,请大家看看,错在哪里呀?只能够接收,不能够发送!!!
程序:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BAUDRATE B38400
#define MODEMDEVICE "/dev/ttyS1"
void readserial();
void writeserial();
void signal_handler_IO (int status);
main() {
int fd,c, res;
struct termios oldtio,newtio;
struct sigaction saio;
char buf[255];
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd