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

📄 app.c

📁 uCOS-II工程文件,使用ICC编译。
💻 C
字号:
/*
*************************************************************************************************************
*                                                uC/OS-II
*                                          The Real-Time Kernel
*
*                                         ATmega128  Sample code
*
* File : APP.C
* By   : Jean J. Labrosse
*************************************************************************************************************
*/
#include <includes.h>
#include <delay.h>
#include "12864.h"
/*
**************************************************************************************************************
*                                               CONSTANTS
*
* Note(s) : 1) See OS_CFG.H for the default stack size: 'OS_TASK_STK_SIZE'
**************************************************************************************************************
*/
#define     CPU_CLK_FREQ                  11059200L
#define     OS_TASK_START_STK_SIZE        OS_TASK_STK_SIZE
#define     OS_TASK_START_HARD_STK_SIZE   OS_TASK_HARD_STK_SIZE

#pragma interrupt_handler OSTickISR:5
/*
**************************************************************************************************************
*                                               VARIABLES
**************************************************************************************************************
*/
OS_STK  TaskStartStk[OS_TASK_STK_SIZE];
OS_STK  Task1Stk[OS_TASK_STK_SIZE];
OS_STK  Task2Stk[OS_TASK_STK_SIZE];
OS_STK  Task3Stk[OS_TASK_STK_SIZE];
OS_EVENT *RandomSem;

/*
**************************************************************************************************************
*                                           FUNCTION PROTOTYPES
**************************************************************************************************************
*/
static void TaskStart(void *pdata);
static void AppTask1(void *p_arg);
static void AppTask2(void *p_arg);
static void AppTask3(void *data);
static void TaskStartDispInit(void);
static void TaskStartDisp(void);
INT8U *ToString(INT16U n) ;
INT8U temp[5];
/*
*********************************************************************************************************
*                                        SETUP THE TICK RATE
*********************************************************************************************************
*/
void  OSTickISR_Handler (void)
{
    TCNT2 = 256 - (CPU_CLK_FREQ / OS_TICKS_PER_SEC / 1024);
    OSTimeTick();
}
/*
*********************************************************************************************************
*                                        SETUP THE TICK RATE
*********************************************************************************************************
*/
void  OSTickISR_Init (void)
{
  	CLI();
	TIMSK &= ~(BIT(TOIE2)/* | BIT(OCIE2) */);	//disable TC2 interrupts
	TCCR2 = 0x00;		// interner Takt, /1024
	TCNT2 = 0; 	// Counter ruecksetzen, 20ms @ 8MHz
    TCCR2 = 0x07;   // 1024
	TIMSK |= BIT(TOIE2);
}
/*
*********************************************************************************************************
*                                            SETUP THE I/Os
*********************************************************************************************************
*/
void  main (void)
{
  	OSTickISR_Init();                            /* Initialize the ticker  */
	OSInit();                                   /* Initialize "uC/OS-II, The Real-Time Kernel"         */
    RandomSem = OSSemCreate(1);
	OSTaskCreate(TaskStart, (void *)0, (OS_STK *)&TaskStartStk[OS_TASK_STK_SIZE - 1], 0);
	OSStart();                                  /* Start multitasking (i.e. give control to uC/OS-II)  */
}
static void TaskStart(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
	OS_CPU_SR cpu_sr;
#endif
	SEI();
	pdata = pdata;
	OS_ENTER_CRITICAL();
	Lcd_Init();
	TaskStartDispInit();
	OS_EXIT_CRITICAL();
	OSStatInit();
	OSTaskCreate(AppTask1, (void *)0, (OS_STK *)&Task1Stk[OS_TASK_STK_SIZE - 1], 1);
	OSTaskCreate(AppTask2, (void *)0, (OS_STK *)&Task2Stk[OS_TASK_STK_SIZE - 1], 2);
	OSTaskCreate(AppTask3, (void *)0, (OS_STK *)&Task3Stk[OS_TASK_STK_SIZE - 1], 3);
	while(1)
	{
		TaskStartDisp();
		OSCtxSwCtr = 0;
		OSTimeDly(50);
	}
}
static void TaskStartDispInit(void)
{
 	 INT8U *line;
	 line = "uCOSii EXEMPLE";
	 LCD_write_string(0,0,line);
	 line = "switch/s:";
	 LCD_write_string(0,3,line);
	 line = "CPU Usage";
	 LCD_write_string(0,2,line);
}
static void TaskStartDisp(void)
{
	INT8U i;
	INT8U a=OSCPUUsage;
	temp[4]=0;
	temp[3]=0x25;
	for(i=3;i>0;--i)   
  	{   
		if(a>0)   
  		{   
            temp[i-1]=a%10+0x30;   
            a/=10;
  		}
		else temp[i-1]=0x20;     
  	} 
	LCD_write_string(5,2,temp);
	a=OSCtxSwCtr;
	for(i=4;i>0;--i)   
  	{   
		if(a>0)   
  		{   
            temp[i-1]=a%10+0x30;   
            a/=10;
  		}
		else temp[i-1]=0x20;     
  	} 
	LCD_write_string(5,3,temp);
}


static void  AppTask1(void *p_arg)
{
    INT8U err;
	p_arg = p_arg;
    while (TRUE) {
		OSSemPend(RandomSem,0,&err);
        PORTB^=0x01;
        OSSemPost(RandomSem);
		OSTimeDly(1);
	}
}
static void  AppTask2(void *p_arg)
{
    INT8U err;
	p_arg = p_arg;
    while (TRUE) {
		OSSemPend(RandomSem,0,&err);
        PORTB^=0x02;
		OSSemPost(RandomSem);
		OSTimeDly(4);
    }
}
static void AppTask3(void *data)
{
#if OS_CRITICAL_METHOD == 3
	OS_CPU_SR cpu_sr;
#endif
	INT8U *line="Task_Three"; 
	data = data;
	LCD_write_string(0,1,line);
	for(;;)
	{
		line="\\";
		OS_ENTER_CRITICAL();
		LCD_write_string(6,1,line);
		OS_EXIT_CRITICAL();
		OSTimeDly (6);
		line="|";
		OS_ENTER_CRITICAL();
		LCD_write_string(6,1,line);
		OS_EXIT_CRITICAL();
		OSTimeDly (6);
		line="/";
		OS_ENTER_CRITICAL();
		LCD_write_string(6,1,line);
		OS_EXIT_CRITICAL();
		OSTimeDly (6);
	}
}










⌨️ 快捷键说明

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