?? main.c
字號:
/************************************************************************************
* Copyright (c) 2004,西安銘朗電子科技有限責任公司
* All rights reserved.
*
* 文件名稱: main.c
* 文件標識: none
* 適用器件: c8051f020
*
* 摘 要: 本文件是ucos-ii test 程序;
*
* 當前版本:1.0
* 作 者:李林利
* 完成日期:2004年12月12日
*
* 歷史版本:0.9
* 原作者 : 李林利
* 完成日期:2004年1月1日
*************************************************************************************/
/************************************************************************************/
// 引用外部頭文件
#include "..\config\common.h"
#include "..\driver\driver.h"
#include "os.h"
#include "..\ucos-ii\ucos_ii.h"
/************************************************************************************/
/************************************************************************************
// 常量及全局變量定義
*************************************************************************************/
sbit A_LED = P3^1;
sbit B_LED = P3^2;
sbit C_LED = P3^3;
unsigned char code ASCII[16] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,\
0x41,0x42,0x43,0x44,0x45,0x46};
/************************************************************************************/
#define A_TASK_PRIO 1
#define B_TASK_PRIO 2
#define C_TASK_PRIO 3
#define START_TASK_PRIO 4
void Task_A(void *yydata); //reentrant;
void Task_B(void *yydata); //reentrant;
void Task_C(void *yydata); //reentrant;
void TaskStart (void *ddata);// reentrant;
void display_num(unsigned char type,unsigned char bits,unsigned long value);
OS_STK TaskStartStk_A[MaxStkSize];//注意:我在ASM文件中設置?STACK空間為40H即64。
OS_STK TaskStartStk_B[MaxStkSize];
OS_STK TaskStartStk_C[MaxStkSize];
OS_STK TaskStartStk[MaxStkSize];
signed long buf[256];
signed long bufb[256];
/************************************************************************************
// 系統初始化功能子程序
*************************************************************************************/
/***********************************************************************************
* 函數名稱:SYSCLK_Init;
*
* 函數功能描述:系統時鐘初始化,使用外部22.1184MHz晶振作為時鐘源;
*
* 輸入參數:none;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void SYSCLK_Init (void)
{
int i; // 延時計數器
OSCXCN = 0x67; // 使用外部22.1184MHz晶振
for(i=0; i<256; i++); // 等待1ms
while(!(OSCXCN & 0x80)); // 等待外部振蕩器穩定
OSCICN = 0x88; // 切換到外部晶振
}
/***********************************************************************************
* 函數名稱:PORT_Init;
*
* 函數功能描述:配置端口初始化,配置交叉開關和端口;
*
* 輸入參數:none;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void PORT_Init (void)
{
XBR0 = 0x1F; //設置XBR0
XBR1 = 0x1E; //設置XBR1
XBR2 = 0x44; //打開交叉開關和弱上拉
P0MDOUT = 0x15; //設置P0口輸出
P0 |= 0xEA; //P0口的輸入腳高阻態
P1MDIN = 0x00; //設置P1口輸入信號類型
P1MDOUT = 0x00; //設置P1口輸出
P1 = 0xFF; //P1口高阻態
P2MDOUT = 0x01; //設置P2口輸出
P2 |= 0xFE; //設置P2口輸出
P3MDOUT = 0xFE; //設置P3口輸出
P3 |= 0x01; //設置P3口輸出
P3 &= 0xEF; //P3.4口置0,禁鈴
P74OUT = 0xF7; //設置P4-P7口輸出
P5 |= 0xF0; //鍵盤輸入P5口高4位高阻態
//EMI0CF = 0x2D; //外部存儲器接口配置
//EMI0TC = 0x9E; //外部存儲器時序控制
}
void display_num(unsigned char type,unsigned char bits,unsigned long value)
{
unsigned char i;
unsigned short k;
if (type==0)
{
Uart0_SendByte('0');
Uart0_SendByte('x');
if (bits==8)
{
i = value&0x000000ff;
Uart0_SendByte(ASCII[i>>4]);
Uart0_SendByte(ASCII[i&0x0f]);
}
else if (bits==16)
{
k = value&0x0000ffff;
Uart0_SendByte(ASCII[k>>12]);
Uart0_SendByte(ASCII[(k>>8)&0x0f]);
Uart0_SendByte(ASCII[(k>>4)&0x0f]);
Uart0_SendByte(ASCII[k&0x0f]);
}
else if (bits==32)
{
k = (value>>16)&0x0000ffff;
Uart0_SendByte(ASCII[k>>12]);
Uart0_SendByte(ASCII[(k>>8)&0x0f]);
Uart0_SendByte(ASCII[(k>>4)&0x0f]);
Uart0_SendByte(ASCII[k&0x0f]);
k = value&0x0000ffff;
Uart0_SendByte(ASCII[k>>12]);
Uart0_SendByte(ASCII[(k>>8)&0x0f]);
Uart0_SendByte(ASCII[(k>>4)&0x0f]);
Uart0_SendByte(ASCII[k&0x0f]);
}
}
if (type==1)
{
if (bits==8)
{
i = value&0x000000ff;
Uart0_SendByte(ASCII[i/100]);
Uart0_SendByte(ASCII[(i%100)/10]);
Uart0_SendByte(ASCII[i%10]);
}
else if (bits==16)
{
k = value&0x000000ff;
Uart0_SendByte(ASCII[k/10000]);
Uart0_SendByte(ASCII[(k%10000)/1000]);
Uart0_SendByte(ASCII[(k%1000)/100]);
Uart0_SendByte(ASCII[(k%100)/10]);
Uart0_SendByte(ASCII[i%10]);
}
}
}
void main(void)
{
WDTCN = 0xde; // disable watchdog timer
WDTCN = 0xad;
SYSCLK_Init(); // initialize oscillator
PORT_Init(); // initialize crossbar and GPIO
//LCDC_Init();
//LCDC_DisFull(Clr);
//dis_start0();
Uart0_Init(115200);
Uart0_SendString("*******************************************************************************\n");
Uart0_SendString("* Copyright (c) 2004,西安銘朗電子科技有限責任公司\n");
Uart0_SendString("* All rights reserved. \n");
Uart0_SendString("* \n");
Uart0_SendString("* web:www,mlarm.com\n");
Uart0_SendString("* UCOS-II Test program.\n");
Uart0_SendString("* Write By: Gavin Li\n");
Uart0_SendString("********************************************************************************\n");
OSInit();
InitTimer0(SYSCLK);
OSTaskCreate(TaskStart, (void *)0, (void *)&TaskStartStk[0], START_TASK_PRIO);
OSStart();
}
void TaskStart (void *ddata) //reentrant
{
ddata = ddata; /* Prevent compiler warning */
OSStatInit(); /* Initialize uC/OS-II's statistics */
OSTaskCreate(Task_A, (void *)0, &TaskStartStk_A[0],A_TASK_PRIO);
OSTaskCreate(Task_B, (void *)0, &TaskStartStk_B[0],B_TASK_PRIO);
OSTaskCreate(Task_C, (void *)0, &TaskStartStk_C[0],C_TASK_PRIO);
for (;;)
{
Uart0_SendString("Tasks =");
display_num(1,8,OSTaskCtr);
Uart0_SendString("\r\n");
Uart0_SendString("CPU Usage =");
display_num(1,8,OSCPUUsage);
Uart0_SendString("%\r\n");
Uart0_SendString("Task switch/sec =");
display_num(1,8,OSCtxSwCtr);
Uart0_SendString("\r\n");
OSCtxSwCtr = 0;
OSTimeDly(OS_TICKS_PER_SEC); /* Wait one second */
}
}
void Task_A(void *yydata) //reentrant
{
unsigned char i;
for (i=0;i<255;i++)
buf[i] = i*1000;
yydata=yydata;
for(;;){
Uart0_SendString("Task_A is active.\n");
A_LED = ~A_LED;
for (i=0;i<255;i++)
buf[i] = buf[i]*buf[i];
OSTimeDly(OS_TICKS_PER_SEC/2);
}
}
void Task_B(void *yydata) //reentrant
{
unsigned char i;
for (i=0;i<255;i++)
bufb[i] = i*1000;
yydata=yydata;
for(;;){
Uart0_SendString("Task_B is active.\n");
B_LED = ~B_LED;
for (i=0;i<255;i++)
bufb[i] = bufb[i]*bufb[i];
OSTimeDly(OS_TICKS_PER_SEC);
}
}
void Task_C(void *yydata) //reentrant
{
signed long bufc[150];
unsigned char i;
for (i=0;i<150;i++)
bufc[i] = i*1000;
yydata=yydata;
for(;;){
Uart0_SendString("Task_C is active.\n");
C_LED = ~C_LED;
for (i=0;i<150;i++)
bufc[i] = bufc[i]*bufc[i];
OSTimeDly(2*OS_TICKS_PER_SEC);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -