[ZLG-ARM] 中断引起取数据中止的问题

[复制链接]
2149|2
 楼主| babyac 发表于 2008-7-7 17:40 | 显示全部楼层 |阅读模式
se, IO, os, TI, PDA
写了两个任务,进入中断后程序有时到未定义指令,有时取数据中止。不知道什么原因,望大虾赐教。<br />一般开中断就会到数据中止。<br />中断句柄也添加了。<br />void&nbsp;Task0(void&nbsp;*pdata)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pdata&nbsp;=&nbsp;pdata;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;TargetInit&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;Sem0&nbsp;=&nbsp;OSSemCreate(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;0x20000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;=&nbsp;0x00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL2&nbsp;=&nbsp;PINSEL2&nbsp;&&nbsp;(~0x08);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTMODE&nbsp;=&nbsp;EXTMODE&nbsp;|&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTPOLAR&nbsp;=&nbsp;EXTPOLAR&nbsp;&&nbsp;0x0D;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;|=&nbsp;((SLEEP)|(SC1)|(SC2)|(SDATA)|(DRDY));<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1DIR&nbsp;|=&nbsp;CAL;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;=&nbsp;SLEEP;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;(SC1|SC2);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR&nbsp;=&nbsp;CAL;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;|=&nbsp;(SCLK|CS);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate&nbsp;(Task1,(void&nbsp;*)0,&nbsp;&Task1Stk[Task1StkSize&nbsp;-&nbsp;1],&nbsp;3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskDel(OS_PRIO_SELF);<br />}<br /><br /><br />void&nbsp;Task1(void&nbsp;*pdata)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;err;<br />&nbsp;&nbsp;&nbsp;&nbsp;pdata&nbsp;=&nbsp;pdata;<br />&nbsp;&nbsp;&nbsp;&nbsp;OSSemPend(Sem0,&nbsp;0,&nbsp;&err);<br />&nbsp;&nbsp;&nbsp;&nbsp;OS_ENTER_CRITICAL();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;AD();<br />&nbsp;&nbsp;&nbsp;&nbsp;OS_EXIT_CRITICAL();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC);&nbsp;<br />}<br /><br />&nbsp;void&nbsp;AD()<br />&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;CS;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;SCLK;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt20;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;=&nbsp;SCLK;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da&nbsp;=&nbsp;(IO0PIN&gt&gt3)&0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;data|(da&lt&lt(19-i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;SCLK;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;=&nbsp;CS;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br /><br /><br />void&nbsp;EINT1_Exception(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;OS_ENTER_CRITICAL();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXTINT&nbsp;=&nbsp;0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;通知中断控制器中断结束<br />&nbsp;&nbsp;&nbsp;&nbsp;OS_EXIT_CRITICAL();<br />&nbsp;&nbsp;&nbsp;&nbsp;OSSemPost(Sem0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;通知采样任务&nbsp;*/<br />}<br />
XDream 发表于 2008-7-7 18:46 | 显示全部楼层

程序问题。

建议先建立两个简单的任务,例如延时任务。然后单独测测外部中断,看看是哪里出了问题。
 楼主| babyac 发表于 2008-7-8 09:00 | 显示全部楼层

中断还是任务?

问题是中断中只有一条OSSemPost(Sem0)语句,是中断引起的,还是其他任务引起的呢&nbsp;,用的是LPC2131的模板,要修改哪里不?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

7

帖子

0

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