验证OSIntCtxSW和OSTickISR无法通过,情况如下

[复制链接]
2627|1
 楼主| fwj556 发表于 2007-6-22 16:54 | 显示全部楼层 |阅读模式
TI, ck, ic, os, NTC
OSStartHighRdy,OSCtxSw,OSTaskStkInit已经通过验证,现在进入验证OSIntCtxSW和OSTickISR,<br />用44b0的RTC的Tick做时钟节拍,RTC的Tick中断模块我验证过没问题,现在我初始化RTC的Tick时把pISR_TICK指向中断服务函数OSTickISR,程序如下:<br /><br />void&nbsp;Rtc_Tick_init(void)<br />{<br />&nbsp;&nbsp;&nbsp;pISR_TICK=(unsigned)OSTickISR;&nbsp;&nbsp;&nbsp;//安装中断向量&nbsp;<br />&nbsp;&nbsp;&nbsp;rINTMSK=~(BIT_GLOBAL|BIT_TICK);&nbsp;<br />&nbsp;&nbsp;&nbsp;rTICINT&nbsp;=&nbsp;127+(1&lt&lt7);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//START<br />}<br />/*********************************************************************************************<br />在OSTickISR中调用此函数*********************************************************************************************/<br />void&nbsp;tick_hook(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_TICK;&nbsp;//清中断标志<br />}<br /><br />/*********************************************************************************************<br />*&nbsp;name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestTask<br />*********************************************************************************************/<br />void&nbsp;&nbsp;&nbsp;&nbsp;TestTask(void&nbsp;*pdata)<br />{<br />&nbsp;&nbsp;&nbsp;pdata&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;pdata;<br />&nbsp;&nbsp;&nbsp;Rtc_Tick_init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化时钟节拍,1秒1次<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;
&nbsp;###&nbsp;############
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(5);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />/*********************************************************************************************<br />*&nbsp;name:&nbsp;&nbsp;&nbsp;&nbsp;main<br />*********************************************************************************************/<br />void&nbsp;Main(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;sys_init();<br />&nbsp;&nbsp;&nbsp;Uart_Init(0,115200);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;
&nbsp;###&nbsp;Main&nbsp;Starts&nbsp;!
&quot;);<br /><br />&nbsp;&nbsp;&nbsp;OSInit();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;OSTaskCreate(TestTask,&nbsp;(void&nbsp;*)0,&nbsp;&TaskStk[0][TASK_STK_SIZE-1],&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;OSStart();<br />}<br /><br />现在问题是<br />1:全速运行时输出<br />###&nbsp;Main&nbsp;Starts&nbsp;!<br />###&nbsp;############<br />只输出一次就没见反映了,停止运行AXD显示PC指向一堆DCD....<br />2:单步运行时<br />程序执行到TestTask的Uart_Printf要串口输出时PC跳到0x14处,<br />此处指令为:bl&nbsp;0x14&nbsp;程序进入死循环<br /><br />好几天,能想到都试过了,还是没反映,实在没辙了,各位大侠帮忙看看,谢谢
飞雪季节 发表于 2007-7-3 09:36 | 显示全部楼层

估计还是你出中断的时候寄存器没有恢复好

建议检查下汇编,<br />从现象来看,OSStartHighRdy运行正常,&nbsp;但发生一次中断时候就出错了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

47

帖子

1

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