打印
[ZLG-ARM]

串口整死了uCOSII

[复制链接]
2316|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51414|  楼主 | 2009-5-26 08:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是周功2131模板改的,用在2103上,加上串口发送字符串后就死机。
有三个任务,任务1是1/4秒闪烁LED1,任务2是1/2秒闪烁LED2,任务3是1秒闪烁LED3;然后在任务3中加上串口发送字节串语句,就死机了,复位后能发出来一次,之后就死了???

sprintf(str,"-----------------");
send_str(str);

如果把上面的这个语句屏蔽了,就能正常运行。

相关帖子

沙发
赖皮| | 2009-5-26 15:39 | 只看该作者

中断向量未注册

SetVICIRQ(INT_UART0,10,(INT32U)UART0_Exception);

或者
        void VICInit(void)
{
    extern void IRQ_Handler(void);
    extern void Timer0_Handler(void);
    extern void UART0_Handler(void);
    extern void IRQ_I2C0_Handler(void);

    VICIntEnClr = 0xffffffff;
    VICDefVectAddr = (uint32)IRQ_Handler;

    VICVectAddr0 = (uint32)Timer0_Handler;
    VICVectCntl0 = (0x20 | 0x04);
    VICIntEnable = 1 << 4;
    
    VICVectAddr14 = (uint32)UART0_Handler;
    VICVectCntl14 = (0x20 | 0x06);
    VICIntEnable = 1 << 6;
    
    VICVectCntl10   = (0x20 | 9);
    VICVectAddr10   = (uint32)IRQ_I2C0_Handler;    
 }

使用特权

评论回复
板凳
zlg_Wankai| | 2009-5-27 09:00 | 只看该作者

re

toLS:
VICIntEnable = 1 << 6;

这个地方有点问题,应该“或”,不能直接等。

toLZ:

请用调试方式查一下程序是死在哪里了。
初步判断会死在sprintf(str,"-----------------");请检查str的空间是否够用,如果不够这么多,肯定会死掉。

使用特权

评论回复
地板
赖皮| | 2009-5-27 09:43 | 只看该作者

to LS

谢谢指教

我一直使用,我以为这样可以
VICIntEnable = 1 << 6;

我看datasheet说的 
VICIntEnable读时该位为1标示相应中断使能
写时 1标示使能,0无效(即不改变相应位的原始状态)

LZ的问题 str应该是 定义了足够的空间 char str[64]

使用特权

评论回复
5
51414|  楼主 | 2009-5-31 09:14 | 只看该作者

可能是堆栈小了

我用的是查询方式,后面我把任务堆栈加大了,好你就没死过了

使用特权

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

本版积分规则

8

主题

27

帖子

0

粉丝