打印

用UCOS在中断中发送信号量,总是不行

[复制链接]
6798|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aoshi0603|  楼主 | 2011-6-1 09:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在中断里放上OSSemPost ()发送信号量后,程序运正就不正常了, 明显的不对就是OSTimeDlyHMSM()都无效了, 任务执行频繁,还请高手指点一二。

我用的是STM32F103VE,架的是UCOS系统, 原来键了两个任务,一个是LCD显示,一个是键键处理,运行的没有错。后来加了I2C任务,配合I2C中断读取外部ADC芯片数据,只要是在I2C中断中加入OSSemPos
void I2C2_EV_IRQHandler(void)
{
OS_CPU_SR cpu_sr;

OS_ENTER_CRITICAL();
OSIntNesting++;
OS_EXIT_CRITICAL();

switch (I2C_GetLastEvent(I2C2))
{
case I2C_EVENT_MASTER_MODE_SELECT: /* EV5 */

OSSemPost (I2CAckSem);

// Master Receiver -------------------------------------------------
// Send slave Address for read
I2C_Send7bitAddress(I2C2, LTC2453_ADDR, I2C_Direction_Receiver);
break;

// Master Receiver -------------------------------------------------------
// Test on I2C2 EV6 and clear them /* EV6 */
case I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED:

// ENABLE I2C2 acknowledgement
I2C_AcknowledgeConfig(I2C2, ENABLE);
break;

// Test on I2C2 EV7 and clear it
case I2C_EVENT_MASTER_BYTE_RECEIVED: /* EV7 */

// Store I2C1 received data
ADCValueUnion.ADCR[ CycDec1(7, I2CPortStruct.ADC_Channel) ][I2CPortStruct.Rx1_Idx--] = I2C_ReceiveData(I2C2);
// Disable ACK and send I2C1 STOP condition before receiving the last data
if(I2CPortStruct.Rx1_Idx == 0)
{
// Disable I2C2 acknowledgement
I2C_AcknowledgeConfig(I2C2, DISABLE);
// Send I2C2 STOP Condition
I2C_GenerateSTOP(I2C2, ENABLE);
}
else OSSemPost (I2CReceiveSem);

break;

case I2C_EVENT_SLAVE_ACK_FAILURE: /* EV3_2 */

I2C_GenerateSTOP(I2C2, ENABLE);
break;

default: break;
}

OSIntExit();
}
t ()就不对。弄了好几天了,实在不行了上来求教。

在I2C中断中加入OSSemPost ()的位置是/* EV5 */,查看是否起始位发送成功。接收这个信号量的是处理I2C的任务。
沙发
coreduo| | 2011-6-8 21:21 | 只看该作者
ucos中断发post sem,确认是可以用的

使用特权

评论回复
板凳
aoshi0603|  楼主 | 2011-6-27 08:29 | 只看该作者
问题差不多解决了, 中断里发送了两个信号量, 第一个不能用, 第二个可以用;
分析第一个发信号量不能用的原因可能是其执行的时间过长了, EV5中断是I2C起始位发送成功中断, 接着要执行语句I2C_Send7bitAddress(I2C2, LTC2453_ADDR, I2C_Direction_Receiver);发送地址, 如果中间加入发送信号量, 会延误I2C发送地址, 因为I2C是同步方式, 一旦延误了I2C时钟,就会出现I2C不好用的现象。

使用特权

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

本版积分规则

6

主题

113

帖子

3

粉丝