📄 main.c
字号:
/********************************************************************************************************
* Filename : main.C
* Programmer : Haven
* 描述:
*********************************************************************************************************
*/
#define USER_MAIN_GLOBALS
#include "..\includes\includes.H"
//DEFINE_THIS_FILE
int main (void)
{
InitialMCU();
ActObjInit();
#if FW_KEY_EN
KeyInit();
#endif
#if FW_TMR_EN
init_timer( TIME_INTERVAL );
enable_timer( 0 );
TmrInit();
TmrInitEvt(0,1,TIMEOUT_SIG);//设定计时器发送什么信号,发给哪个线程
TmrInitEvt(1,5,TIMEOUT_SIG);//(n,prio,sig)
TmrInitEvt(2,3,TIMEOUT_SIG);
#endif
#if FW_DISP_EN
DispInit();
#endif
#if FW_COMM_EN
UARTInitCh1(115200);
UARTInitCh2(115200);
//UARTInitCh3(115200);
//UARTInitCh4(115200);
CommInit();
#endif
#if FW_CAN_EN
CAN_Init( BITRATE100K24MHZ );
CAN_SetACCF( ACCF_ON );
#endif
TmrStart(1,200);
InitialObj();
//WDTInit();
OS_EXIT_CRITICAL();
while(1){
ActObjScheduler();
//ClrWDT();
}
}
void InitialObj(void)
{
ActObjInitTran(1,(STAT_PTR)&COMM1_S0);
ActObjInitTran(2,(STAT_PTR)&COMM2RxTx);
//ActObjInitTran(3,(STAT_PTR)&COMM3RxTx);//因为CAN用的IO和COMM3冲突
//ActObjInitTran(4,(STAT_PTR)&COMM4RxTx);
ActObjInitTran(5,(STAT_PTR)&CanRxTxData);
ActObjInitTran(7,(STAT_PTR)&ActObj7TmrTick);
}
void PrintCOMM(INT8U ch,INT8U *s)
{
while(*s){
CommPutTxChar (ch, *s++);
}
}
STAT_PTR COMM1_S0(HFSM *me)
{
switch (SIG(me)) {
case ENTRY_SIG:
PrintCOMM(COMM1,"HFSM TEST:please input 0A,0B,0C,0D,0E,0F,10; ");
PrintCOMM(COMM1,"S0-ENTRY;");
TmrStart(0,5000);
return (STAT_PTR)0;
case EXIT_SIG:
PrintCOMM(COMM1,"S0-EXIT;");
return (STAT_PTR)0;
case INIT_SIG:
PrintCOMM(COMM1,"S0-INIT;");
TRAN(&COMM1_S1);
return (STAT_PTR)0;
case 0x0E:
PrintCOMM(COMM1,"S0--0E;");
TRAN(&COMM1_S211);
return (STAT_PTR)0;
case TIMEOUT_SIG:
TmrStartISR(0,5000);
PrintCOMM(COMM1,"HFSM TEST:please input 0A,0B,0C,0D,0E,0F,10; ");
return (STAT_PTR)0;
}
return (STAT_PTR)&HfsmTop;
}
STAT_PTR COMM1_S1(HFSM *me)
{
switch (SIG(me)) {
case ENTRY_SIG:
PrintCOMM(COMM1,"S1-ENTRY;");
return (STAT_PTR)0;
case EXIT_SIG:
PrintCOMM(COMM1,"S1-EXIT;");
return (STAT_PTR)0;
case INIT_SIG:
PrintCOMM(COMM1,"S1-INIT;");
INIT_TRAN(&COMM1_S11);
return (STAT_PTR)0;
case 0x0A:
PrintCOMM(COMM1,"S1--0A;");
TRAN(&COMM1_S1);
return (STAT_PTR)0;
case 0x0B:
PrintCOMM(COMM1,"S1--0B;");
TRAN(&COMM1_S11);
return (STAT_PTR)0;
case 0x0C:
PrintCOMM(COMM1,"S1--0C;");
TRAN(&COMM1_S2);
return (STAT_PTR)0;
case 0x0D:
PrintCOMM(COMM1,"S1--0D;");
TRAN(&COMM1_S0);
return (STAT_PTR)0;
case 0x0F:
PrintCOMM(COMM1,"S1--0F;");
TRAN(&COMM1_S211);
return (STAT_PTR)0;
}
return (STAT_PTR)&COMM1_S0;
}
STAT_PTR COMM1_S11(HFSM *me)
{
switch (SIG(me)) {
case ENTRY_SIG:
PrintCOMM(COMM1,"S11-ENTRY;");
return (STAT_PTR)0;
case EXIT_SIG:
PrintCOMM(COMM1,"S11-EXIT;");
return (STAT_PTR)0;
case 0x10:
PrintCOMM(COMM1,"S11-10;");
TRAN(&COMM1_S211);
return (STAT_PTR)0;
}
return (STAT_PTR)&COMM1_S1;
}
STAT_PTR COMM1_S2(HFSM *me)
{
switch (SIG(me)) {
case ENTRY_SIG:
PrintCOMM(COMM1,"S2-ENTRY;");
return (STAT_PTR)0;
case EXIT_SIG:
PrintCOMM(COMM1,"S2-EXIT;");
return (STAT_PTR)0;
case INIT_SIG:
PrintCOMM(COMM1,"S2-INIT;");
INIT_TRAN(&COMM1_S21);
return (STAT_PTR)0;
case 0x0C:
PrintCOMM(COMM1,"S2--0C;");
TRAN(&COMM1_S1);
return (STAT_PTR)0;
case 0x0F:
PrintCOMM(COMM1,"S2--0F;");
TRAN(&COMM1_S11);
return (STAT_PTR)0;
}
return (STAT_PTR)&COMM1_S0;
}
STAT_PTR COMM1_S21(HFSM *me)
{
switch (SIG(me)) {
case ENTRY_SIG:
PrintCOMM(COMM1,"S21-ENTRY;");
return (STAT_PTR)0;
case EXIT_SIG:
PrintCOMM(COMM1,"S21-EXIT;");
return (STAT_PTR)0;
case INIT_SIG:
PrintCOMM(COMM1,"S21-INIT;");
INIT_TRAN(&COMM1_S211);
return (STAT_PTR)0;
case 0x0B:
PrintCOMM(COMM1,"S21--0B;");
TRAN(&COMM1_S211);
return (STAT_PTR)0;
}
return (STAT_PTR)&COMM1_S2;
}
STAT_PTR COMM1_S211(HFSM *me)
{
switch (SIG(me)) {
case ENTRY_SIG:
PrintCOMM(COMM1,"S211-ENTRY;");
return (STAT_PTR)0;
case EXIT_SIG:
PrintCOMM(COMM1,"S211-EXIT;");
return (STAT_PTR)0;
case 0x0D:
PrintCOMM(COMM1,"S211--0D;");
TRAN(&COMM1_S21);
return (STAT_PTR)0;
//case 0x0c:
//PrintCOMM(COMM1,"12345678;");
//return (STAT_PTR)0;
case 0x10:
PrintCOMM(COMM1,"S211--10;");
TRAN(&COMM1_S0);
return (STAT_PTR)0;
}
return (STAT_PTR)&COMM1_S21;
}
STAT_PTR COMM2RxTx(HFSM *me)//UART1
{
INT8U c,err;
switch (SIG(me)) {
case COMRX_SIG:
while(!CommIsRxEmpty(COMM2)){ //如果接收缓冲区不空
c = CommGetRxChar(COMM2,&err);
if (err != COMM_RX_EMPTY){
CommPutTxChar (COMM2, c);
}
}
return (STAT_PTR)0;
}
#if HFSM_EN
return (STAT_PTR)&HfsmTop;
#else
return (STAT_PTR)0;
#endif
}
STAT_PTR COMM3RxTx(HFSM *me)//UART2
{
INT8U c,err;
switch (SIG(me)) {
case COMRX_SIG:
EvtQueClr(3);
while(!CommIsRxEmpty(COMM3)){ //如果接收缓冲区不空
c = CommGetRxChar(COMM3,&err);
if (err != COMM_RX_EMPTY){
CommPutTxChar (COMM3, c);
}
}
return (STAT_PTR)0;
}
return (STAT_PTR)&HfsmTop;
}
STAT_PTR COMM4RxTx(SM_STRU *me)//UART3
{
INT8U c,err;
switch (SIG(me)) {
case COMRX_SIG:
while(!CommIsRxEmpty(COMM4)){ //如果接收缓冲区不空
c = CommGetRxChar(COMM4,&err);
if (err != COMM_RX_EMPTY){
CommPutTxChar (COMM4, c);
}
}
return (STAT_PTR)0;
}
return (STAT_PTR)&HfsmTop;
}
STAT_PTR ActObj7TmrTick(SM_STRU *me)
{
switch (SIG(me)) {
case TICK_TIMEOUT_SIG://10ms
Tmr_Tick();
return (STAT_PTR)0;
}
return (STAT_PTR)&HfsmTop;
}
void InitialMCU(void)
{
#if FW_COMM_EN
UART0TxEmpty = 1;
UART1TxEmpty = 1;
UART2TxEmpty = 1;
UART3TxEmpty = 1;
#endif
}
void WDTHandler(void) __irq
{
WDMOD &= ~WDTOF; /* clear the time-out terrupt flag */
VICVectAddr = 0; /* Acknowledge Interrupt */
}
DWORD WDTInit( void )
{
if ( install_irq( WDT_INT, (void *)WDTHandler, HIGHEST_PRIORITY ) == FALSE )
{
return (FALSE);
}
WDTC = 0x003FFFFF;
WDMOD = 0X03;
WDFEED = 0xAA; /* Feeding sequence */
WDFEED = 0x55;
return( TRUE );
}
void ClrWDT(void)
{
WDFEED = 0XAA;
WDFEED = 0X55;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -