OpenEdv-开源电子网

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

DMA问题,而且软件编译成功,硬件出错很奇特。

[复制链接]

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2011-11-3 10:03:11 | 显示全部楼层 |阅读模式
话说神奇哦~~~
这个DMA是一个蛋疼的东西
我根据原子哥的程序,自写了一下,原子哥的程序是把内部flash里数组的值赋值到RAM中数组:
原子哥是这样定义数组的:
u8 SendBuff[5200];
const u8 TEXT_TO_SEND[]={"ALIENTEK MiniSTM32 DMA 串口实验"}; 
他在程序中这样赋值:
 for(i=0;i<5200;i++)//填充ASCII字符集数据
    {
  if(t>=j)//加入换行符
  {
   if(mask)
   {
    SendBuff=0x0a;
    t=0;
   }else
   {
    SendBuff=0x0d;
    mask++;
   } 
  }else//复制TEXT_TO_SEND语句
  {
   mask=0;
   SendBuff=TEXT_TO_SEND[t];
   t++;
  }      
    }  
运行没错误,我仿照原子哥自写了一下,也是从flash里读取数组数据,然后放到ram中准备发送:
我是这样定义的:
const u8 shit[]={"我的妈啊~~~~"};
u8 send[5200];
然后是这样赋值的:
 while(1)
 {
  while(i<5200)
  {   
   send=shit[t];
   i++;
   t++;
   if(t==12)
   {
    t=0;
    send=0x0a;
   }
  }
后来,程序运行后死在启动文件里的一行B       .上,不知道为什么,但取消掉数组定义的const,程序正常了,但又出现新的问题,串口接收正常,换行不正常,还有oled一直显示100%,串口一直还在接收。
万思不得其解啊~~~



如果定义数组的时候不删掉const,则运行时候死在这里:

删掉const后,正常,但oled显示一直100,串口接收除了不换行之外,其余正常。
万思不得其解,程序死在上图中的哪行是什么意思??
附上程序
编译环境MDK4.2
开发板是原子的板子,oled是原子的oled模块。

dma.rar

726.61 KB, 下载次数: 265

Time?And?Relative?Dimension?In?Space.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-11-3 10:35:22 | 显示全部楼层
t和i的初始值没有.
可能会是个很大的随机数.这个有可能就是导致硬件错误的原因.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-11-3 10:45:47 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢原子哥,一点即通~~~
oled读数不正常这个问题我自己尝试解决中~~~
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 20:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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