天嵌 ARM开发社区

 找回密码
 注册
查看: 2030|回复: 6

2440开发板显示问题

[复制链接]
kongxiaobo 发表于 2012-2-10 17:23:39 | 显示全部楼层 |阅读模式
我自己写了个程序,在arm端运行,主要是在arm端测试读写,代码如下:
/*
*实现开发板与宿主机的串口通信
*宿主机实现写,开发板读
*步骤:
        1.打开串口
        2.设置串口参数
        3.读写串口(包括宿主机和开发板)
*/

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/stat.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>

#include "open_port_arm9.c"
#include "set_port_config.c"

#define BUFFER_SIZE 5                /*最大缓冲区*/
#define TARGET_COM_PROT 1        /*用n表示目标机上的串口n*/

int main(int argc,char* argv[]){
        //打开串口设备
        int fd;
        char buff[BUFFER_SIZE];
       
        if(fd = open_port(TARGET_COM_PROT) < 0){
                perror("open_port");
                return -1;
        }

        if(set_port_config(fd,2400,8,'N',1) < 0){
                perror("set_port_config");
                return -1;       
        }
        printf("open success\n");       
        do{
                memset(buff,0,BUFFER_SIZE);
                if(write(fd,"1",BUFFER_SIZE) == -1){
                        printf("write");
                        break;
                }
                sleep(1);
                printf("\n-----------------------\n");
                int ret = 0;
                if(ret = read(fd,buff,BUFFER_SIZE) > 0){
                        puts(buff);
                        printf("\n");
                        printf("%d\n",ret);
                        strcat(buff,"-arm");
                        printf("words are:%s\n",buff);
                        fflush(stdout);
                }else{
                        printf("wrong");
                }
       
       
        }while(strncmp(buff,"quit",4));               
        close(fd);
        return 0;
}
但是却出现了很奇怪的问题,我用ret接收read过来的字符,但是printf之后,却发现每次的显示都为1,但是却没有在开发板里面的终端显示出来(我用交叉编译器在pc端编译好,然后放到板子里,用板子里配置好的终端运行,却发现没输出这个字符),但是我输入有5个字符,它却每次显示都只有一个字符。
输出结果如下:
open success
                          nihao--------------------------------
1
-armds are:
                          nihao-------------------------------
1
-armds are:
格式全乱了,不知道为什么,而且加入我在write处,传过去的就是一个1字符,它的结果就更奇怪了,其他都跟上面输出结果一样,就是nihao那边变成了1w,无缘无故多了个w,实在不能理解为什么会这样。请那位有耐心的朋友仔细帮我分析一下,看看问题出在哪里?
羽褶清弦 发表于 2012-2-10 20:02:33 | 显示全部楼层
:)我也是新手,来学习学习。。
TQ-lkp 发表于 2012-2-11 13:35:51 | 显示全部楼层
楼主需要把read和write的四个参数弄明白了
int ret = write(fd,"1",BUFFER_SIZE) ;
ret 为实际写入的个数
BUFFER_SIZE为想要写入的字符个数
你这个地方只有一个字符却非要写入5个数据,怎么会不乱呢

int ret = read(fd,buff,BUFFER_SIZE);
ret为实际读到的字符个数
buff为存储读出字符的缓冲区
BUFFER_SIZE为最大读的字符的个数,必须小于等于buff的最大长度

楼主先把函数功能弄清楚了再看写程序,另外关于串口的我们提供了源码,你到论坛中搜索下
 楼主| kongxiaobo 发表于 2012-2-13 09:59:42 | 显示全部楼层
TQ-lkp 发表于 2012-2-11 13:35
楼主需要把read和write的四个参数弄明白了
int ret = write(fd,"1",BUFFER_SIZE) ;
ret 为实际写入的个数 ...

恩,好的。关于这个不好意思,本来是五个的,"nihao",但是在有五个字符的时候,arm端的read也只有接收到1个字符,后来改掉了,BUFFER_SIZE没改过来。核心问题是:它已经接收到了,已经读到字符了,read返回的数据是大于0,却无法显示出来,不知道为什么。
亚瑟王 发表于 2012-2-20 11:39:34 | 显示全部楼层
亲,你用光盘里面自带的那个串口测试程序,工作正常吗?我没有去细看你的代码。
 楼主| kongxiaobo 发表于 2012-2-21 17:30:31 | 显示全部楼层
亚瑟王 发表于 2012-2-20 11:39
亲,你用光盘里面自带的那个串口测试程序,工作正常吗?我没有去细看你的代码。

正常的,但是我对比了下代码,基本都一样,需要注意什么吗?
亚瑟王 发表于 2012-2-23 09:22:06 | 显示全部楼层
亲,根据你的描述,应该是你的串口程序的初始化有问题引起的。你直接用天嵌的串口程序修改吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-10-7 04:31 , Processed in 1.022500 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表