⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 南格(AVR)操作系统 for keil
💻 C
字号:
/*
**********************************Copyright (c) ****************************
*	  						cwg
*			       All Rights Reserved
*			     		QQ:7084394
*
*---------------------------------File Info---------------------------------
*File Name     	:main.c
*Descriptor    	:main task
*Create By     	:ChenWeiGuo
*Create Date   	:2007-4-27
*Version       	:V1.0
*Note	     	:
*
*---------------------------------------------------------------------------
*Modified By  	:
*Modified Date  :
*Version        :
*Note	     	:
*
****************************************************************************
*/
#include "config.h"

/*任务定义*/
AVRX_GCC_TASKDEF(MainTask, 40, 0);
AVRX_GCC_TASKDEF(UartTask, 40, 1);
/*全局系统变量*/
/*软件定时器*/      
TimerControlBlock   Timer1,Timer2;  
/*超时等待事件定义*/
//TimerMessageBlock   TimerOut;
/*事件定义*/
//MessageControlBlock LedMessage;
/*队列定义*/
//MessageQueue MyQueue;
/*信号量定义*/
 
/***************************************************************************
*Function Name	
*Description        :定时器0比较中断函数,1ms中断一次,自动重载
*Input parameters   :
*Return Values:   	:
*Global Variables 	:
*Calling Modules  	:IntProlog,AvrXTimerHandler,Epilog
***
*Create By	      	:ChenWeiGuo
*Create Tate	 	:2007-4-27
***
*Modified By	  	:
*Modified Date    	:
*Note		      	:
****************************************************************************/
#pragma optimize=z 4
AVRX_SIGINT(SIG_OUTPUT_COMPARE0)
{	
	IntProlog();                //内核堆栈切换  
	AvrXTimerHandler();         //时钟队列管理
	Epilog();                   //返回任务堆栈
}
/***************************************************************************
*Function Name	
*Description        :定时器2比较中断函数,100us中断一次,自动重载
*Input parameters   :
*Return Values:   	:
*Global Variables 	:
*Calling Modules  	:IntProlog,Epilog
***
*Create By	      	:ChenWeiGuo
*Create Tate	 	:2007-4-27
***
*Modified By	  	:
*Modified Date    	:
*Note		      	:
****************************************************************************/
#pragma optimize=z 4
AVRX_SIGINT(SIG_OUTPUT_COMPARE2)
{	
    IntProlog();                //内核堆栈切换                   
    Epilog();                   //返回任务堆栈
}
/***************************************************************************
*Function Name	  :MainTask
*Description      :
*Input parameters :
*Return Values:   :
*Global Variables :
*Calling Modules  :
***
*Create By	      :ChenWeiGuo
*Create Tate	  :2007-4-27
***
*Modified By	  :
*Modified Date    :
*Note		      :
****************************************************************************/
void MainTask(void)
{		    
    while(1)
    {       	
    	/*等待消息*/
        AvrXDelay(&Timer1, 1000);           //1S 延时          
        LED = LED ^ 0x20;         
    }
}
/***************************************************************************
*Function Name	  :OsInit
*Description      :系统堆栈和系统工作节拍初始化
*Input parameters :
*Return Values:   :
*Global Variables :
*Calling Modules  :AvrXSetKernelStack
***
*Create By	      :ChenWeiGuo
*Create Tate	  :2007-4-27
***
*Modified By	  :
*Modified Date    :
*Note		      :
****************************************************************************/
void OsInit(void)
{
	/*设置系统内核堆栈,默认堆栈*/
	AvrXSetKernelStack(0);
	/*设置睡眠模式*/	
    MCUCR = (1 << SE);
    /*定时器0为比较模式*/      
    TCCR0 = TMC8_CK256;
    /*比较值*/
    OCR0 = TCNT0_INIT;  
    /*开定时器0比较中断*/ 
    TIMSK = (1 << OCIE0);
    
    return;
}
/***************************************************************************
*Function Name	  :SoftInit
*Description      :系统运行前参数初始化
*Input parameters :
*Return Values:   :
*Global Variables :
*Calling Modules  :InitUart
***
*Create By	      :ChenWeiGuo
*Create Tate	  :2007-4-27
***
*Modified By	  :
*Modified Date    :
*Note		      :
****************************************************************************/
void SoftInit(void)
{  
	/*控制灯设置为输出*/ 
    LEDDDR |= BV(5); 
    /*串口初始化*/   
    InitUart();
    /*定时器2初始化*/    
    TIMSK &= ~BV(OCIE2);
    /*分频系数为8,比较模式*/	
   	TCCR2 = ((1 << WGM21) | (1 << CS21));	
   	/*定时100us*/		
   	OCR2 = 100;   	 		    
   	TIMSK |= BV(OCIE2);    
    
    return;
}
/***************************************************************************
*Function Name	  :UartTask
*Description      :
*Input parameters :
*Return Values:   :
*Global Variables :
*Calling Modules  :
***
*Create By	      :ChenWeiGuo
*Create Tate	  :2006-9-25
***
*Modified By	  :
*Modified Date    :
*Note		      		:
****************************************************************************/
void UartTask(void)
{	
    uint8 byData;	
    
    while(1)
    {       	
    	/*等待消息*/
        while(GetUart1Data(&byData) == ERROR)
        {
        	AvrXDelay(&Timer2, 1);           //1ms 延时
        }        
        SendUart1String(&byData, 1);
    }
}
/***************************************************************************
*Function Name	  :main
*Description      :
*Input parameters :
*Return Values:   :
*Global Variables :
*Calling Modules  :
***
*Create By	      :ChenWeiGuo
*Create Tate	  :2006-4-27
***
*Modified By	  :
*Modified Date    :
*Note		      :
****************************************************************************/
int main(void)                 
{ 	
	/*系统初始化*/	
	OsInit(); 	
	SoftInit();  	
	/*创建任务*/		
    AvrXRunTask(TCB(MainTask));    
    AvrXRunTask(TCB(UartTask));   
     
    /*切换到第一个任务的堆栈区*/
    Epilog();                   
    while(1);    
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -