📄 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 + -