[ZLG-ARM] keil+ulink+lpc23xx的几个问题.贵宾: computer00 hotpower zlgarm

[复制链接]
 楼主| shkliu 发表于 2007-3-2 08:44 | 显示全部楼层 |阅读模式
软件:没有操作系统,从keil的例子改的。<br />硬件:lpc2378,自己做的2层板。<br />贵宾:&nbsp;computer00&nbsp;hotpower&nbsp;zlgarm<br /><br />1。解释一下realviwe&nbsp;和&nbsp;carm在建立工程前选择的,有什么区别呢?<br />2。比较奇怪:不知道下面的描述是不是清楚:)<br />&nbsp;&nbsp;&nbsp;系统有一个timer0&nbsp;,10ms。uart0输出一些程序运行信息。<br />static&nbsp;uint32&nbsp;timer_cnt;&nbsp;&nbsp;&nbsp;<br />void&nbsp;timer0_isr()&nbsp;__irq{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IENABLE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer_cnt++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDISABLE;<br />}<br />开始如果启动定时器,uart一直启动。程序就会在运行到malloc(另外一个初始化程序)就去了Dabt异常了。<br />最后看到了hotpower兄还是谁给别人的回复,我加上了static&nbsp;volatile&nbsp;uint32&nbsp;timer_cnt;&nbsp;结果定时器可以启动了。但是我又有一个问题3。高兴。。以为问题解决了:)&nbsp;结果:(&nbsp;我发现有时候我的程序加了一行uart_print之类的;而且不是在中断服务程序里面。就又出现了怪问题,malloc之前就去了异常了。<br />3。我没有选择编译器优化,还需要volatile吗?<br />4。zlg315说23xx,4月份有第二版,那第一版就是有问题了,我碰到的该不会芯片bug??&nbsp;第一版已知的bug是什么呢?<br />我试验了malloc是没有问题的。<br />多谢!
computer00 发表于 2007-3-2 09:14 | 显示全部楼层

re

1.看看这个,就在第一个图里面,先选择好你要的编译器,然后再来建立工程。建立好工程之后,配置好选项。<br /><a href="http://computer00.21ic.org/user1/2198/archives/2006/16425.html" target=_blank>http://computer00.21ic.org/user1/2198/archives/2006/16425.html</a><br /><br /><br />2.不知道回答什么,去了data异常,一般是指针越界,也有可能是程序跑飞。<br /><br />3.不管你有没有开编译器优化,该需要volatile的地方就得要加,不能存在侥幸心理。<br /><br />
 楼主| shkliu 发表于 2007-3-2 09:30 | 显示全部楼层

多谢!

1,那个我看过了,直到步骤,但是为什么选择carm而不是realview?我下载的例子使用的realview&nbsp;选择了&nbsp;安装路径bin。<br />2。我也是有点摸不找头脑,所以请高手帮忙分析一下。我使用unlink在flash里面仿真,碰到了那个malloc如果run&nbsp;over就不行一下子到了异常,run&nbsp;into就可以过去到下一句。<br />
xyele 发表于 2007-3-2 09:37 | 显示全部楼层

在这些系统最好自己写malloc函数,定位到固定内存块

  
computer00 发表于 2007-3-2 09:48 | 显示全部楼层

是自由选择啊,没有为什么。

就像你吃饭打菜一样,自己喜欢挑什么就挑什么了。<br /><br /><br />也许是你的内存设置不对吧。听很多人说自带的malloc有问题,不过我没用过,不清楚了。
 楼主| shkliu 发表于 2007-3-2 10:14 | 显示全部楼层

malloc我也看过了,简单的可以,如果

频繁调用malloc&nbsp;free,那么产生了碎片怎么做阿,我觉得太复杂了:(<br /><br />内存设置?我非配了比较大的堆栈。第一个malloc只申请了64字节,我想应该不回有问题。不知道00兄内存还需要怎么设置阿?
computer00 发表于 2007-3-2 10:18 | 显示全部楼层

这个我就不清楚了,也许你需要读读keil的帮助手册

如果你的内存够用的话,最好使用静态分配法,尽量减少内存分配和释放的次数。
 楼主| shkliu 发表于 2007-3-2 10:25 | 显示全部楼层

malloc也使不得不用的。

无法避免不用。<br />比较奇怪的就是&nbsp;为什么step&nbsp;into可以正常的过去,step&nbsp;over不行呢?是不是运行太快了?&nbsp;<br />#define&nbsp;PLL_MValue&nbsp;&nbsp;&nbsp;&nbsp;38<br />#define&nbsp;PLL_NValue&nbsp;&nbsp;&nbsp;&nbsp;2<br />#define&nbsp;CCLKDivValue&nbsp;&nbsp;&nbsp;&nbsp;4<br />#define&nbsp;Fosc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11059200<br />#define&nbsp;Fcclk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32768*150*12<br />#define&nbsp;Fcco&nbsp;&nbsp;&nbsp;&nbsp;Fosc*2*(PLL_MValue+1)/(PLL_NValue+1)&nbsp;/*&lt290*/<br />
computer00 发表于 2007-3-2 10:29 | 显示全部楼层

有可能。你将时钟速度降下来试试

以前我试过一次单步可,全速不行,是因为在中断里面某些语句后面少了nop指令。
 楼主| shkliu 发表于 2007-3-2 10:43 | 显示全部楼层

我现在在调。

nop你说在中断里面加。我还没有进中断呢,在第一个malloc全速的时候就异常。<br />开始我以为malloc分配的时候不能中断呢,原来那个时候timer中断还没有到。
 楼主| shkliu 发表于 2007-3-2 11:40 | 显示全部楼层

????

error====================<br />&nbsp;&nbsp;&nbsp;&nbsp;60:&nbsp;Re:&nbsp;&nbsp;&nbsp;&nbsp;xxx&nbsp;=&nbsp;malloc(&nbsp;cc&nbsp;);&nbsp;&nbsp;<br />0x0000B9FC&nbsp;&nbsp;E1A00009&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R9<br />0x0000BA00&nbsp;&nbsp;EB003304&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00018618<br />0x0000BA04&nbsp;&nbsp;E1A0A000&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R10,R0<br /><br />ok=======================<br />&nbsp;&nbsp;&nbsp;&nbsp;60:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm{NOP};&nbsp;&nbsp;&nbsp;&nbsp;<br />0x0000B9FC&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;62:&nbsp;Re:&nbsp;&nbsp;&nbsp;&nbsp;xxx&nbsp;=&nbsp;malloc(&nbsp;cc&nbsp;);&nbsp;<br />0x0000BA00&nbsp;&nbsp;E1A00009&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R9<br />0x0000BA04&nbsp;&nbsp;EB003306&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00018624<br />0x0000BA08&nbsp;&nbsp;E1A0A000&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R10,R0<br /><br />上面那个step&nbsp;into到BL&nbsp;0x0018618可以进去,也可以出来。如果直接运行到MOV&nbsp;R10,R0就异常。<br /><br />下面这个ok。我发现不相同的就是malloc在flash中的地址了。&nbsp;<br /><br />两个程序的区别就是增加了一个__asm(NOP);<br /><br />不知道什么原因?是不是芯片bug阿?
hotpower 发表于 2007-3-3 01:23 | 显示全部楼层

不喜欢用malloc(),用动态数组简单些

int&nbsp;xxx&nbsp;(void)&nbsp;{<br />char&nbsp;str[512],&nbsp;s[16];<br />&nbsp;&nbsp;&nbsp;&nbsp;sprintf(str,&nbsp;&quot;我%d次倒塌了~~~&quot;,&nbsp;Iap.result[1]);<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart.puts(str);<br />//..........<br />}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

97

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

26

主题

97

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部