打印
[串口烧写]

DSP程序在RAM中正常运行,FLASH烧写不行

[复制链接]
12794|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HD21425|  楼主 | 2013-8-31 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我目前在调试板子的RS232通讯,用的控制芯片是DSP2812,程序在线调试也就是RAM调试时没有问题,通讯正常,但是当我烧写flash后,同样的程序通讯就不正常了,期间任何错误都没有弹出,提示都是成功的,请问有可能是哪些方面的原因导致的? 求大神们指导

相关帖子

沙发
zhangmangui| | 2013-8-31 23:16 | 只看该作者
这个问题很常见的    你烧写进去之后是通讯失败还是直接没有反应  
我曾经遇到的问题是   烧写后上电第一次通讯失败   复位一下就正常工作了
如果烧写后直接没有反应   你可以将flash中的代码搬移到RAM中运行
https://bbs.21ic.com/icview-556044-1-1.html
看看我的分享

使用特权

评论回复
板凳
zhangmangui| | 2013-8-31 23:16 | 只看该作者
本帖最后由 zhangmangui 于 2013-8-31 23:23 编辑

这个问题很常见的    你烧写进去之后是通讯失败还是直接没有反应  
我曾经遇到的问题是   烧写后上电第一次通讯失败   复位一下就正常工作了
如果烧写后直接没有反应   你可以将flash中的代码搬移到RAM中运行
https://bbs.21ic.com/icview-556044-1-1.html
看看我的分享

使用特权

评论回复
地板
wufawutian8高| | 2013-9-1 21:13 | 只看该作者
楼上的兄弟 问题解决了吗   我的是DSP 28335 。RAM运行正常,烧写到flash之后 ,我再程序当中加了一个方波的程序,烧写完后在示波器上可以测出方波,但是我的串口程序部分和上位机通信不成功,(我的方波程序运行就代表我的串口程序正在运行,这个事没有异议的),还有有的变量是 -1#QNAN,哪位大神能给解释下是什么原因吗?

使用特权

评论回复
5
wufawutian8高| | 2013-9-1 21:13 | 只看该作者
zhangmangui 发表于 2013-8-31 23:16
这个问题很常见的    你烧写进去之后是通讯失败还是直接没有反应  
我曾经遇到的问题是   烧写后上电第一次 ...

楼上的兄弟 问题解决了吗   我的是DSP 28335 。RAM运行正常,烧写到flash之后 ,我再程序当中加了一个方波的程序,烧写完后在示波器上可以测出方波,但是我的串口程序部分和上位机通信不成功,(我的方波程序运行就代表我的串口程序正在运行,这个事没有异议的),还有有的变量是 -1#QNAN,哪位大神能给解释下是什么原因吗?

使用特权

评论回复
6
zhangmangui| | 2013-9-1 21:44 | 只看该作者
wufawutian8高 发表于 2013-9-1 21:13
楼上的兄弟 问题解决了吗   我的是DSP 28335 。RAM运行正常,烧写到flash之后 ,我再程序当中加了一个方 ...

你按照我3楼分享的链接将flash中的调到ram中运行看看结果
串口不成功   复位一下   在串口通信   不知道是否合理

使用特权

评论回复
7
HD21425|  楼主 | 2013-9-2 07:51 | 只看该作者
我的是FLASH下载成功以后,程序应该在运行,因为相关的LED灯是亮的,只是通讯不正常。
此外三楼说的把FLASH程序在RAM中运行,也试过,还是不行。谢谢大家帮忙。

使用特权

评论回复
8
wufawutian8高| | 2013-9-2 09:23 | 只看该作者
zhangmangui 发表于 2013-9-1 21:44
你按照我3楼分享的链接将flash中的调到ram中运行看看结果
串口不成功   复位一下   在串口通信   不知道 ...

我的程序开始的时候  就已经把让程序搬移到RAM中运行了  就是从flash搬到 RAM 了 ?  我的问题就是两个
(1)为什么我的串口部分和上位机通讯的程序在运行 ,上位机却没有反应?
(2)为什么我flash在线调试的时候 发现我的很多变量的值都是 -1#QNAN,上网说是程序计算出来无效值,但是我的RAM中很正常啊 ,这与在flash中运行有关吗?还是与配置有关?还是别的原因?

使用特权

评论回复
9
wufawutian8高| | 2013-9-2 09:32 | 只看该作者
HD21425 发表于 2013-9-2 07:51
我的是FLASH下载成功以后,程序应该在运行,因为相关的LED灯是亮的,只是通讯不正常。
此外三楼说的把FLASH ...

问题解决了吗  你的串口是干什么用的?

使用特权

评论回复
10
HD21425|  楼主 | 2013-9-2 13:56 | 只看该作者
没有解决,SCI外接RS232,用于跟上位机通讯

使用特权

评论回复
11
zhangmangui| | 2013-9-2 14:35 | 只看该作者
HD21425 发表于 2013-9-2 13:56
没有解决,SCI外接RS232,用于跟上位机通讯

还没解决啊   

使用特权

评论回复
12
HD21425|  楼主 | 2013-9-2 19:11 | 只看该作者
zhangmangui 发表于 2013-9-2 14:35
还没解决啊

没有解决啊,求大神指导呢

使用特权

评论回复
13
wufawutian8高| | 2013-9-2 20:05 | 只看该作者
HD21425 发表于 2013-9-2 07:51
我的是FLASH下载成功以后,程序应该在运行,因为相关的LED灯是亮的,只是通讯不正常。
此外三楼说的把FLASH ...

奇怪了 我的也是和上位机通讯 也是用的SCI  难道有可能是是出现了同样的原因  我的还出现了 数据都是QNAN的情况 不知道什么原因

使用特权

评论回复
14
HD21425|  楼主 | 2013-9-2 21:15 | 只看该作者
wufawutian8高 发表于 2013-9-2 20:05
奇怪了 我的也是和上位机通讯 也是用的SCI  难道有可能是是出现了同样的原因  我的还出现了 数据都是QNAN ...

难道是共性问题,我想了好久也没想通,因为没有任何的错误提示,无从下手的感觉!

使用特权

评论回复
15
wufawutian8高| | 2013-9-3 10:50 | 只看该作者
HD21425 发表于 2013-9-2 21:15
难道是共性问题,我想了好久也没想通,因为没有任何的错误提示,无从下手的感觉! ...

我刚发现我的定义的发送函数竟然没有执行 不知道什么原因 难道和CMD文件有关 ?
/*****************************/
/*定义发送函数               */
/*****************************/
void scib_xmit(int a)
{
      while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}
      ScibRegs.SCITXBUF=a;
}
/*****************************/  这个在烧写的程序中根本就不执行  什么原因?

使用特权

评论回复
16
wufawutian8高| | 2013-9-3 11:02 | 只看该作者
zhangmangui 发表于 2013-9-2 14:35
还没解决啊

我刚发现我的定义的发送函数竟然没有执行 不知道什么原因 难道和CMD文件有关 ?
/*****************************/
/*定义发送函数               */
/*****************************/
void scib_xmit(int a)
{
      while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}
      ScibRegs.SCITXBUF=a;
}
/*****************************/  这个在烧写的程序中根本就不执行  什么原因?

使用特权

评论回复
17
HD21425|  楼主 | 2013-9-3 11:09 | 只看该作者
wufawutian8高 发表于 2013-9-3 10:50
我刚发现我的定义的发送函数竟然没有执行 不知道什么原因 难道和CMD文件有关 ?
/********************** ...

你好像是使用的FIFO模式,而且选择了使用查询方式发送数据,我一般都是用中断方式发送数据。针对你的问题:你是说不执行整个中断函数呢? 还是没有执行中断里面的语句? 如果是前者,那应该是没有被调用,应该是程序问题,跟CMD关系不大吧。
你是FLASH在线调试? 加断点观察?

使用特权

评论回复
18
zhangmangui| | 2013-9-3 11:31 | 只看该作者
wufawutian8高 发表于 2013-9-3 11:02
我刚发现我的定义的发送函数竟然没有执行 不知道什么原因 难道和CMD文件有关 ?
/********************** ...

与CMD肯定没关系   你确定调用了就可以  

使用特权

评论回复
19
wufawutian8高| | 2013-9-3 15:12 | 只看该作者
zhangmangui 发表于 2013-9-3 11:31
与CMD肯定没关系   你确定调用了就可以

我的却用的是FIFO模式  用的查询  ! 但是我的RAM 调试的时候 这个发送函数还是运行的  就烧写进去之后 flash在线加断点发现就单独这个函数不运行  不知道哪里出错了

/*****************************/
/*定义发送函数               */
/*****************************/
void scib_xmit(int a)
{
      while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}
      ScibRegs.SCITXBUF=a;
}
/*****************************/
就单独这个发送函数不运行了

使用特权

评论回复
20
wufawutian8高| | 2013-9-3 16:18 | 只看该作者
zhangmangui 发表于 2013-9-2 14:35
还没解决啊

终于找到原因了   原来是我的CMD文件配置错误,档从RAM到flash的时候,换成F28335.CMD文件时候,可能是我的全局变量定义的数组比较大,所以编译的时候出现错误说 RAML4 的空间只有1000,而你的ebss段需要1490,所以我就自作聪明的吧 .ebss段改到FLASH B中去了! 所以出现我的变量都是 -1#QNAN,也就是无效的数,而我的串口发送程序需要一个和一个数 float a 建立关系,数 float a 一直是一个无效的数,那么这个函数也就不被调用了!
   后来查资料是这么说的    ” 未初始化的数据 .ebss存储单元可以在程序的执行过程中被改变和操作,与程序代码或者常量不同的是,未初始化的数据或者变量必须位于易失性的存储区之中,例如RAM“
  看来CMD文件一般不要改啊,一不小心就给改错了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

69

帖子

0

粉丝