?? app.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 + -