OpenEdv-开源电子网

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

关于串口发送数组和指针的差异

[复制链接]

20

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2016-7-26
在线时间
90 小时
发表于 2016-11-28 11:16:22 | 显示全部楼层 |阅读模式
10金钱
项目中需要发送几百KB的数据,采用缓存到数组然后发送的方式。
最开始采用直接定义数组的方式,发现发送出去的数据中出现了一些错误数据,而通过Debug查看数组中的内容,发现发送时数组的值都为正确值。
[mw_shl_code=applescript,true]        u8 usartdata[2409],Bag_Cnt=1;
  u8 ifo[6]={00,0x09,0x66,0xAA,0xB1,0xE2};
        u8 *p;       
        u32 stataddr,count=0;
       
        stataddr = rec_addr;
        usartdata[2408]=0xFF;
        usartdata[6]=FZ_ID;
        memcpy(usartdata,ifo,6);
        while(stataddr < ADDR_FLASH_END)
        {
    p=Data_Out(stataddr);
    if(p)
                {
                  memcpy(usartdata+8+(count*12),p,12*sizeof(u8));
/*************************&#187;o′&#230;200×éêy&#212;ù·¢*****************************/                 
                        stataddr += 12;
                  count++;
                       
                        if(count%200==0)                  //200ì&#245;′&#171;ê&#228;ò&#187;′&#206;
                        {
                                usartdata[7]=Bag_Cnt;
                                USART3_SendData(usartdata,2409);
                                memset(usartdata+7,0,2400*sizeof(u8));
                                Bag_Cnt++;
                        }
                }
                else
      break;
        }                [/mw_shl_code]
后来改为采用malloc的方式,就可以正确发送数据了,但还是不清楚到底中间哪里出了问题。
[mw_shl_code=applescript,true]        u8 Bag_Cnt=1;
  u8 ifo[6]={00,0x09,0x66,0xAA,0xB1,0xE2};
        u8 push[10]={0xEE,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};
        u8 *p,*q;       
        u32 stataddr,count=0;
       
        stataddr = rec_addr;
        q=(u8*)malloc(2049*sizeof(u8));
        memset(q,0,2409);
        *(q+2408)=0xFF;
        *(q+6)=FZ_ID;
        memcpy(q,ifo,6*sizeof(u8));
        while(stataddr < ADDR_FLASH_END)
        {
    p=Data_Out(stataddr);
    if(p)
                {
                  memcpy(q+8+((count%200)*12+1),p+1,11*sizeof(u8));
/*************************&#187;o′&#230;200×éêy&#212;ù·¢*****************************/                 
                        stataddr += 12;
                  count++;
                       
                        if(count%200==0)                  //200ì&#245;′&#171;ê&#228;ò&#187;′&#206;
                        {
                                *(q+7)=Bag_Cnt;
                                USART1_SendData(q,2409);
//                                free(q);
                                memset(q+8,0,2400*sizeof(u8));
                                Bag_Cnt++;
                                delay_ms(10);
                        }
                }
                else
      break;
        }                [/mw_shl_code]

求大神指点迷津~~

最佳答案

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

数组没定义成全局变量,栈的空间不够了估计。把栈空间改大了看看
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-28 11:16:23 | 显示全部楼层

数组没定义成全局变量,栈的空间不够了估计。把栈空间改大了看看
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-11-28 11:22:27 | 显示全部楼层
帮顶,不清楚为什么会出现这种问题,关注一下。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
660
金钱
660
注册时间
2013-11-22
在线时间
131 小时
发表于 2016-11-28 11:26:48 | 显示全部楼层
本帖最后由 zhp 于 2016-11-28 11:44 编辑

把usartdata[2409] 这些大数组定义为全局变量试试。
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-11-28 14:10:16 | 显示全部楼层
Data_Out(stataddr);怎么写的
回复

使用道具 举报

20

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2016-7-26
在线时间
90 小时
 楼主| 发表于 2016-11-28 14:14:28 | 显示全部楼层
止天 发表于 2016-11-28 14:10
Data_Out(stataddr);怎么写的

就是返回一个数组的头指针
回复

使用道具 举报

20

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2016-7-26
在线时间
90 小时
 楼主| 发表于 2016-11-28 14:14:41 | 显示全部楼层
zhp 发表于 2016-11-28 11:26
把usartdata[2409] 这些大数组定义为全局变量试试。

我试试看
回复

使用道具 举报

20

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2016-7-26
在线时间
90 小时
 楼主| 发表于 2016-11-28 17:59:27 | 显示全部楼层
再自顶一下
回复

使用道具 举报

20

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2016-7-26
在线时间
90 小时
 楼主| 发表于 2016-11-30 15:09:41 | 显示全部楼层
憨厚诚实大叔 发表于 2016-11-28 18:02
数组没定义成全局变量,栈的空间不够了估计。把栈空间改大了看看

尝试用指针方式时,发现malloc不成功,后来修改了启动文件中的堆栈值就可以了,但是用数组的话还是有问题,我再改成全局变量试试吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 19:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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