本帖最后由 uc_cm0 于 2011-10-11 09:49 编辑
硬件平台:菜农Cortex-M0助学板
编译器:IAR EWARM 6.21
//------------------------------------------------------------------
#include "proj_incs.h"
#include <iostream>
VSTATE_Declaration(VSTATE_1); //声明一个状态VSTATE_1
VSTATE_Declaration(VSTATE_2); //声明一个状态VSTATE_2
VSTATE_Declaration(VSTATE_3); //声明一个状态VSTATE_3
VSTATE_Declaration(VSTATE_4); //声明一个状态VSTATE_4
VSTATE_SCHED_Definition(VSTATE_SCHED); //定义一个状态机调度器VSTATE_SCHED(状态机定以后,初始处于空闲状态)
int main(void)
{
DrvSYS_UnlockProtectedReg(); //时钟初始化
DrvSYS_Open(48000000UL);
DrvSYS_LockProtectedReg();
GPIO_LED_1<<IO_OFF<<IO_MAKE_OUTPUT; //LED_1初始化
GPIO_LED_2<<IO_OFF<<IO_MAKE_OUTPUT; //LED_2初始化
GPIO_LED_3<<IO_OFF<<IO_MAKE_OUTPUT; //LED_3初始化
GPIO_LED_4<<IO_OFF<<IO_MAKE_OUTPUT; //LED_4初始化
SystemCoreClock=DrvSYS_GetHCLKFreq();
SysTick_Config(SystemCoreClock/1000 ); //系统节拍初始化
__enable_interrupt(); //打开中断
VSTATE_SCHED<<VSTATE_OBJECT(VSTATE_1); //设置状态机下一个状态为VSTATE_1
while(1)
{
VSTATE_SCHED.Do(); //状态机VSTATE_SCHED调度循环
}
}
//------------------------------------------------------------------
//VSTATE_1 实现
VSTATE_Implementation(VSTATE_1)
{
//ENTER: LED_1亮,LED_4灭----------------------------
if(this->GetEnterFlagAndClear())
{
GPIO_LED_1<<IO_ON; //LED_1亮
GPIO_LED_4<<IO_OFF; //LED_4灭
*this<<VSTATE_OBJECT(VSTATE_2)<<1000;
//设置状态机下一个状态为VSTATE_2,并延时1000ms
}
//Do:空-----------------------------------------------------------
//EXIT:空---------------------------------------------------------
return ;
}
//------------------------------------------------------------------
//VSTATE_2 实现
VSTATE_Implementation(VSTATE_2)
{
//ENTER: LED_2亮,LED_1灭----------------------------
if(this->GetEnterFlagAndClear())
{
GPIO_LED_2<<IO_ON; //LED_2亮
GPIO_LED_1<<IO_OFF; //LED_1灭
*this<<VSTATE_OBJECT(VSTATE_3)<<1000;
//设置状态机下一个状态为VSTATE_3,并延时1000ms
}
//Do: 空-----------------------------------------------------------
//EXIT: 空---------------------------------------------------------
return ;
}
//------------------------------------------------------------------
//VSTATE_3 实现
VSTATE_Implementation(VSTATE_3)
{
//ENTER: LED_3亮,LED_2灭----------------------------
if(this->GetEnterFlagAndClear())
{
GPIO_LED_3<<IO_ON; //LED_3亮
GPIO_LED_2<<IO_OFF; //LED_2灭
*this<<VSTATE_OBJECT(VSTATE_4)<<1000;
//设置状态机下一个状态为VSTATE_4,并延时1000ms
}
//Do: 空-----------------------------------------------------------
//EXIT: 空---------------------------------------------------------
return ;
}
//------------------------------------------------------------------
//VSTATE_4 实现
VSTATE_Implementation(VSTATE_4)
{
//ENTER: LED_4亮,LED_3灭----------------------------
if(this->GetEnterFlagAndClear())
{
GPIO_LED_4<<IO_ON; //LED_4亮
GPIO_LED_3<<IO_OFF; //LED_1灭
*this<<VSTATE_OBJECT(VSTATE_1)<<1000;
//设置状态机下一个状态为VSTATE_1,并延时1000ms
}
//Do: 空-----------------------------------------------------------
//EXIT: 空---------------------------------------------------------
return ;
}
|