基于ARM9 2410的嵌入式串口编程
2007-04-17 OHY
下面的程序是在2410开发平台上调试通过的,一个串口的发送实验程序serial.c。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
int main()
{
char szsendbuf[4];
int fd,c,res,nsize = 4;
FILE *pfile;
int filel;
struct termios oldtio,newtio;
struct stat st;
fd = open("/dev/ttyS0",O_RDWR | O_NOCTTY);
tcgetattr(fd, &oldtio);
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = B115200 | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR | ICRNL;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &newtio);
stat("a.txt", &st);
pfile = fopen("a.txt", "r");
filel = st.st_size;
while(4 == nsize)
{
bzero(szsendbuf, 4);
nsize = fread(szsendbuf, 1, 4, pfile);
nsize = write(fd, szsendbuf, nsize);
}
fclose(pfile);
tcsetattr(fd, TCSANOW, &oldtio);
close(fd);
}
代码写完以后,需要用ARM的GCC编译器来编译代码,而不能以GCC来编译代码。因为2410是ARM体系结构,和普通PC机的体系结构不一样的。
可以将armv4l-unknown-linux-gcc这个文件拷贝到刚才编写C的源程序同一目录下,这样就不需要使用一串长长的绝对路径了。如果需要将刚才的serial.c编译成一个名字为serial的可执行文件,可使用下面的命令:
./ armv4l-unknown-linux-gcc -o serial serial.c
在运行上述生成的文件时,先通过minicom将宿主机挂载到目标板上。例如宿主机的IP地址为:192.168.2.100,目标板的IP地址为:192.168.2.101。可以通过下面的命令将其挂载:
mount 192.168.2.100:/ /tmp
这样,宿主机的这个根目录就挂载到目标板上了。由于要进行串口的调试实验,minocom需要用来与目标板进行窗口通信。所有对目标板的操作控制,最好通过telnet来进行,可以通过下面命令实现:
telnet 192.168.2.101
连接到目标板上成功的时候,需要输入登陆的用户名和密码,一般是输入root按回车就可以,也有例外的。
然后在目标板的/tmp目录中就可以看到整个宿主机根目录的内容,再找到serial所在的目录,输入下面命令:
./serial 就可在宿主机的minicom中看到一个文件属性的输出了。