OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6103|回复: 3

SD卡读取文件,串口打印时发现偶尔缺字

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-16
在线时间
20 小时
发表于 2016-2-12 01:03:36 | 显示全部楼层 |阅读模式
20金钱
新手学习想写一个G代码解释器,需要将SD卡信息逐行读取,查了一下资料,可以使用结构体类型
例如SD卡文本信息:                                        逐行读取:G1 F1200 X91.218 Y74.712 E2.03552     
G1 F1200 X91.218 Y74.712 E2.03552                  定义结构体:typedef struct {
G1 X91.218 Y75.543 E2.07698                                              char commond;  //命令种类 G T M
G1 X91.027 Y75.384 E2.08938                                              U32 LineNumber;
                                                                                       double X;         

                                                                                       double Y;....}GC;
在需要时直接读取结构体信息,我内存申请了两个50字节的databuff。用于存储SD卡读取来的信息,DMA读取,将databuf串口打印没有问题
可我需要的是逐行读取,又写了一个断句的,当读到‘\n’时断句,再次串口打印,发现会缺首字符,找不出规律。但是固定地方。调整串口速度没用,应该也不是干扰
求各位支支招.


void G_commond(void)
{
        u8 i;
//        u8 pop;
        if(def==0)
        {
                for(i=j;i<50;i++)
                {
                        cbuf[h]=databuf1;       //×°&#212;&#216;DD
                        h++;j++;
                        if((char)databuf1=='\n')
                        {
       cf=1;//h=0;//i++;//j++;                 //&#214;&#195;&#206;&#187;±êê&#182;&#206;&#187;£&#172;&#195;üá&#238;DDò&#209;&#190;-ì&#238;3&#228;íê±&#207;
                        //cbuf[h]=databuf1;
                         break;
                        }       
                }
          if(j>=49)
                {
                  j=0;df=1;def=1;             //cbuf±ê&#214;&#190;&#206;&#187;   databuf±ê&#214;&#190;&#206;&#187;   &#199;&#229;&#191;&#213;i,h
                }
          
        }else
         {
                for(i=j;i<50;i++)
                {
                        cbuf[h]=databuf2;       //×°&#212;&#216;DD
                        h++;j++;
                        if((char)databuf2=='\n')
                        {
       cf=1;//h=0;//i++;//j++;                         //&#214;&#195;&#206;&#187;±êê&#182;&#206;&#187;£&#172;&#195;üá&#238;DDò&#209;&#190;-ì&#238;3&#228;íê±&#207;
                         //cbuf[h]=databuf1;
                                break;
                        }       
                }
          if(j>=49)
                {
                  j=0;df=1;def=0;             //cbuf±ê&#214;&#190;&#206;&#187;   databuf±ê&#214;&#190;&#206;&#187;   &#199;&#229;&#191;&#213;i,h
                }
          
         }
}


最佳答案

查看完整内容[请看2#楼]

好吧,一步步调出来了,j>=49改成j>49就可行了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-16
在线时间
20 小时
 楼主| 发表于 2016-2-12 01:03:37 | 显示全部楼层
好吧,一步步调出来了,j>=49改成j>49就可行了。
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-16
在线时间
20 小时
 楼主| 发表于 2016-2-12 01:05:06 | 显示全部楼层
重发一遍,这是断句用的
[mw_shl_code=c,true]void G_commond(void)
{
        u8 i;
//        u8 pop;
        if(def==0)
        {
                for(i=j;i<50;i++)
                {
                        cbuf[h]=databuf1;       //×°&#212;&#216;DD
                        h++;j++;
                        if((char)databuf1=='\n')
                        {
       cf=1;//h=0;//i++;//j++;                 //&#214;&#195;&#206;&#187;±êê&#182;&#206;&#187;£&#172;&#195;üá&#238;DDò&#209;&#190;-ì&#238;3&#228;íê±&#207;
                        //cbuf[h]=databuf1;
                         break;
                        }       
                }
          if(j>=49)
                {
                  j=0;df=1;def=1;             //cbuf±ê&#214;&#190;&#206;&#187;   databuf±ê&#214;&#190;&#206;&#187;   &#199;&#229;&#191;&#213;i,h
                }
          
        }else
         {
                for(i=j;i<50;i++)
                {
                        cbuf[h]=databuf2;       //×°&#212;&#216;DD
                        h++;j++;
                        if((char)databuf2=='\n')
                        {
       cf=1;//h=0;//i++;//j++;                         //&#214;&#195;&#206;&#187;±êê&#182;&#206;&#187;£&#172;&#195;üá&#238;DDò&#209;&#190;-ì&#238;3&#228;íê±&#207;
                         //cbuf[h]=databuf1;
                                break;
                        }       
                }
          if(j>=49)
                {
                  j=0;df=1;def=0;             //cbuf±ê&#214;&#190;&#206;&#187;   databuf±ê&#214;&#190;&#206;&#187;   &#199;&#229;&#191;&#213;i,h
                }
          
         }
}
[/mw_shl_code]
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-1-16
在线时间
20 小时
 楼主| 发表于 2016-2-12 01:13:50 | 显示全部楼层
图片显示直接将SD卡读到的databuf打印正常,断句后会在我找不出规律的地方出现首字符缺失。而且位置固定

databuf直接打印

databuf直接打印

断句后打印

断句后打印
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 02:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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