|
QP NANO状态机问题
1.想请问一下 最后一定会跑到QF_onIdle 所以中断必须先__low_power_mode_off_on_exit();
如果不想进QF_onIdle 应当如何修改
2. Send_DATA(B1_ad,B2_ad,B3_ad);
占用时间过久
会进入Q_onAssert
多中断源 无嵌套 只能减少Send_DATA(B1_ad,B2_ad,B3_ad)占用时间吗
3.因为2种产品需要
菜单
分别是段式LCD 和12864LCD
有看过傻孩子的菜单代码
有推荐比较可移植的架构吗
目前打算用QP来做
ISR POST ACTIVE OBJECT
#pragma vector=ADC_VECTOR
__interrupt void ADCISR(void)
{
//static unsigned int index = 0;
__low_power_mode_off_on_exit();
switch (SD12IV)
{
case 2: // SD16MEM Overflow
break;
case 4: // SD16MEM0 IFG
break;
case 6: // SD16MEM1 IFG
break;
case 8:
B1_ad=SD12MEM0;
B2_ad=SD12MEM1;
B3_ad=SD126MEM2;
QActive_postISR((QActive *)&AO_comp, ARM_SIG, 0);
break;
}
}
void QF_onIdle(void) {
__low_power_mode_1();
}
主程序
QState XXX_initial(XXX_t *me) {
switch (Q_SIG(me)) {
case Q_INIT_SIG:
{
Set_XXX(23,0);
return Q_HANDLED();
}
case Q_ENTRY_SIG: {
QActive_arm((QActive *)me, 5);
QActive_post((QActive *)&AO_comp, ARM_SIG, me->timeout);
me->timeout=10;
Set_XXX(me->xyz,0);
return Q_HANDLED();
}
case Q_EXIT_SIG: {
Set_XXX(99,0);
return Q_TRAN(&Measure_state);
}
case Q_TIMEOUT_SIG:
QActive_arm((QActive *)me, 1000);
QActive_post((QActive *)&AO_ comp, ARM_SIG, me->timeout--);
//Set_Dia(me->xyz++,0);
return Q_HANDLED();
case ARM_SIG:
Set_Dia(me->timeout++,0);
Send_DATA(B1_ad,B2_ad,B3_ad);
return Q_HANDLED();
}
return Q_TRAN(&XXX_initial);
}
|
|