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

📄 main.c

📁 牛人写的AVR单片机操作系统源代码
💻 C
字号:
#include "core.h"
#include "uart.h"

#define TASK_STACK_LEN_Medium  64       //任务堆栈大小(最小要大于35 + Function_Nest_Depth*2)
#define TASK_STACK_LEN_Large   100



INT8U TASK0_STACK[TASK_STACK_LEN_Medium];
INT8U TASK1_STACK[TASK_STACK_LEN_Medium];
INT8U TASK2_STACK[TASK_STACK_LEN_Medium];
INT8U TASK3_STACK[TASK_STACK_LEN_Medium];
INT8U TASK4_STACK[TASK_STACK_LEN_Medium];
INT8U TASK5_STACK[TASK_STACK_LEN_Medium];
INT8U TASK6_STACK[TASK_STACK_LEN_Large];

/*
***********************************************************
*函 数 名:
*功    能:
*输入参数:  无
*输出参数:  无
*返 回 值:  无
*==========================================================
*日    期:  2006.01.01
*作    者:  frankie.hu
*修改记录:
***********************************************************
*/
void TASK0(void)
{
    while(1)
    {
        OS_DelayTick(1);
        PORTC ^= 0X01;
    }
}

/*
***********************************************************
*函 数 名:
*功    能:
*输入参数:  无
*输出参数:  无
*返 回 值:  无
*==========================================================
*日    期:  2006.01.01
*作    者:  frankie.hu
*修改记录:
***********************************************************
*/
void TASK1(void)
{
    while(1)
    {
        OS_DelayTick(2);
        PORTC ^= 0X02;
    }
}
/*
***********************************************************
*函 数 名:
*功    能:
*输入参数:  无
*输出参数:  无
*返 回 值:  无
*==========================================================
*日    期:  2006.01.01
*作    者:  frankie.hu
*修改记录:
***********************************************************
*/
void TASK2(void)
{
    while(1)
    {
        OS_DelayTick(3);
        PORTC ^= 0X04;
    }
}
/*
***********************************************************
*函 数 名:
*功    能:
*输入参数:  无
*输出参数:  无
*返 回 值:  无
*==========================================================
*日    期:  2006.01.01
*作    者:  frankie.hu
*修改记录:
***********************************************************
*/
void TASK3(void)
{
    while(1)
    {
        OS_DelayTick(4);
        PORTC ^= 0X08;
    }
}
/*
***********************************************************
*函 数 名:
*功    能:
*输入参数:  无
*输出参数:  无
*返 回 值:  无
*==========================================================
*日    期:  2006.01.01
*作    者:  frankie.hu
*修改记录:
***********************************************************
*/
void TASK4(void)
{
    while(1)
    {
        OS_DelayTick(5);
        PORTC ^= 0X10;
    }
}
/*
***********************************************************
*函 数 名:
*功    能:
*输入参数:  无
*输出参数:  无
*返 回 值:  无
*==========================================================
*日    期:  2006.01.01
*作    者:  frankie.hu
*修改记录:
***********************************************************
*/
//const INT8U str1[]="This is a mini avr RTOS!";
//const INT8U strVer[]="miRTOS Version 0.1";
void TASK5(void)
{
	INT8U ch;
//	INT8U i;
//	
//	for(i=0;i<23;i++)
//		Uart_Putc(str1[i]);
//	
//	ch = 0x0d;
//	Uart_Putc(ch);
//	ch = 0x0a;
//	Uart_Putc(ch);
//	
//	for(i=0;i<18;i++)
//		Uart_Putc(strVer[i]);
//	
//	ch = 0x0d;
//	Uart_Putc(ch);
//	ch = 0x0a;
//	Uart_Putc(ch);

    while(1)
    {
        ch = Uart_Getc();
        Uart_Putc(ch);
        PORTC ^= 0X20;
    }
}
/*
***********************************************************
*函 数 名:
*功    能:
*输入参数:  无
*输出参数:  无
*返 回 值:  无
*==========================================================
*日    期:  2006.01.01
*作    者:  frankie.hu
*修改记录:
***********************************************************
*/
void TASK6(void)
{
    INT8U i;
    INT8U j = 0;
    INT16U value = 0;
    static INT8U buf[4];
    const INT8U pos[4]={0x38,0x34,0x2c,0x1c};
    const INT8U DigitNumber[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
    //const INT8U DigitNumber[10] = {0xC0,0xCF,0xA4,0x86,0x8B,0x92,0x90,0xC7,0x80,0x82};



    while(1)
    {
        OS_DelayTick(1);
        j++;
        if (j == TASK_SWITCH_FREQ)
        {
            j = 0;
            value++;
            if (value >= 3600)
                value = 0;
        }

        buf[3] = value%60;
        buf[1] = value/60;
        buf[2] = DigitNumber[buf[3]/10];
        buf[3] = DigitNumber[buf[3]%10];
        buf[0] = DigitNumber[buf[1]/10];
        buf[1] = DigitNumber[buf[1]%10];
        if (j < TASK_SWITCH_FREQ/2)
        {
            buf[0] = buf[0]&0x7F;
            buf[1] = buf[1]&0x7F;
            buf[2] = buf[2]&0x7F;
            buf[3] = buf[3]&0x7F;
        }

        i = j&0x03;
        PORTB = buf[i];
        PORTD = pos[i]|(PORTD&0xC0);

    }
}




void main(void)
{
    PORTC = 0x07;
    DDRC = 0x07;
    PORTD = 0xFC;
    DDRD = 0xFC;
    PORTB = 0xFF;
    DDRB = 0xFF;

    Uart_Init();
    OS_Init();

    OS_CreateTask(TASK0,TASK0_STACK+TASK_STACK_LEN_Medium,0);
    OS_CreateTask(TASK1,TASK1_STACK+TASK_STACK_LEN_Medium,1);
    OS_CreateTask(TASK2,TASK2_STACK+TASK_STACK_LEN_Medium,2);
    OS_CreateTask(TASK3,TASK3_STACK+TASK_STACK_LEN_Medium,3);
    OS_CreateTask(TASK4,TASK4_STACK+TASK_STACK_LEN_Medium,4);
    OS_CreateTask(TASK5,TASK5_STACK+TASK_STACK_LEN_Medium,5);
    OS_CreateTask(TASK6,TASK6_STACK+TASK_STACK_LEN_Large,6);
    OS_Start();

}

⌨️ 快捷键说明

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