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

📄 taskexcu.c

📁 1.将uC/OS-II操作系统移植到Mega16上 2.建立两个任务
💻 C
字号:

#define Test1_GLOBALS
#include "includes.h"

#include <iom16v.h>
#include <macros.h>
#include <stdio.h>
#include "prototype.h"

#pragma interrupt_handler OSTickISR:5

//******************************************************************************
// Constants
#define TaskStartPrio	10		// Task-Prioritaeten
//*****************************************************************************
// Variablen
INT8U    time[6];
INT8U    h,m,s,state;
OS_STK	Task1Stack[OS_TASK_DEF_STK_SIZE];		// startup task stack
OS_STK	Task2Stack[OS_TASK_DEF_STK_SIZE];
//ICC-AVR application builder : 2003-12-28 21:52:56
// Target : M8
// Crystal: 8.0000Mhz

//*****************************************************************************
// Prototypes

//*****************************************************************************
//			TickISR
//*****************************************************************************
// Init Timer/Counter2 fuer Takterzeugung
void TC2_Init (void)
{	
	/* Only uses TIMER2 overflow for tick interrupt. Timer compare
     * can also be used.
     */
	TIMSK &= ~(BIT(TOIE2)/* | BIT(OCIE2) */);	//disable TC2 interrupts
	TCCR2 = 0x48;		// CTC
	TCNT2 = 0; 	// Counter ruecksetzen, 2ms @ 8MHz
    TCCR2 |= 0x06;   // 256
	OCR2 = 250;			// OutputCompareRegister
	TIMSK |= BIT(TOIE2);	// enable OVF-interrupt
	                                                                                                                                //TIMSK |= OCIE2;		// enable COMP-interrupt
	
    SEI();	// enable global interrupt     
}

//*****************************************************************************
// Interrupt Timer/Counter0 Overflow
// OVF_Takt:  8MHz / 256 / 250 = 125Hz (8ms)

void Task1(void *pdata);
void Task2(void *pdata);

//*****************************************************************************
// Start
void main(void)
{
	OSInit();		// OS init
	OSTaskCreate(Task1,
				(void *)0,
				&Task1Stack[OS_TASK_DEF_STK_SIZE-1],
				7);
	OSTaskCreate(Task2,
				(void *)0,
				&Task2Stack[OS_TASK_DEF_STK_SIZE-1],
				8); 
	// init und start tick
    TC2_Init();			// Timer/Counter#2 Overflow and Comp init 
	Board_init();  
    OSStart();		// start multitasking
}

//*****************************************************************************
void Task1(void *data)
{
    uchar i;
	data = data;	
	state = 1;
	for (;;)
	{
        DS1302_getT(time);
		for(i=0;i<3;i++)
		{
		    time[i*2+1]=time[i*2]>>4;
			time[i*2]=time[i*2]&0x0F;
		}
		All_smg_display(time);
		OSTimeDly (1);
	}
}
void Task2(void *data)
{
 	uchar i=0;
    data = data;
	//OSTimeDly(5);	
	for (;;)
	{
	    if(i<8)
		{
		    All_led(0);	//全部熄灭
  			One_led(i,1);	//点亮指定的LED;
			i=i+1;
		}
		else
		{
		    i=0;
		}
		OSTimeDly (15);
	}
}

⌨️ 快捷键说明

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