[ZLG-ARM] 串口整死了uCOSII

[复制链接]
3258|4
 楼主| 51414 发表于 2009-5-26 08:59 | 显示全部楼层 |阅读模式
用的是周功2131模板改的,用在2103上,加上串口发送字符串后就死机。<br />有三个任务,任务1是1/4秒闪烁LED1,任务2是1/2秒闪烁LED2,任务3是1秒闪烁LED3;然后在任务3中加上串口发送字节串语句,就死机了,复位后能发出来一次,之后就死了???<br /><br />sprintf(str,&quot;-----------------&quot;);<br />send_str(str);<br /><br />如果把上面的这个语句屏蔽了,就能正常运行。
赖皮 发表于 2009-5-26 15:39 | 显示全部楼层

中断向量未注册

SetVICIRQ(INT_UART0,10,(INT32U)UART0_Exception);<br /><br />或者<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;VICInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;IRQ_Handler(void);<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;Timer0_Handler(void);<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;UART0_Handler(void);<br />&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;void&nbsp;IRQ_I2C0_Handler(void);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnClr&nbsp;=&nbsp;0xffffffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICDefVectAddr&nbsp;=&nbsp;(uint32)IRQ_Handler;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr0&nbsp;=&nbsp;(uint32)Timer0_Handler;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl0&nbsp;=&nbsp;(0x20&nbsp;|&nbsp;0x04);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;4;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr14&nbsp;=&nbsp;(uint32)UART0_Handler;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl14&nbsp;=&nbsp;(0x20&nbsp;|&nbsp;0x06);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;6;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl10&nbsp;&nbsp;&nbsp;=&nbsp;(0x20&nbsp;|&nbsp;9);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr10&nbsp;&nbsp;&nbsp;=&nbsp;(uint32)IRQ_I2C0_Handler;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;}
zlg_Wankai 发表于 2009-5-27 09:00 | 显示全部楼层

re

toLS:<br />VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;6;<br /><br />这个地方有点问题,应该“或”,不能直接等。<br /><br />toLZ:<br /><br />请用调试方式查一下程序是死在哪里了。<br />初步判断会死在sprintf(str,&quot;-----------------&quot;);请检查str的空间是否够用,如果不够这么多,肯定会死掉。
赖皮 发表于 2009-5-27 09:43 | 显示全部楼层

to LS

谢谢指教<br /><br />我一直使用,我以为这样可以<br />VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;6;<br /><br />我看datasheet说的&nbsp;<br />VICIntEnable读时该位为1标示相应中断使能<br />写时&nbsp;1标示使能,0无效(即不改变相应位的原始状态)<br /><br />LZ的问题&nbsp;str应该是&nbsp;定义了足够的空间&nbsp;char&nbsp;str[64]
 楼主| 51414 发表于 2009-5-31 09:14 | 显示全部楼层

可能是堆栈小了

我用的是查询方式,后面我把任务堆栈加大了,好你就没死过了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

27

帖子

0

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