📄 ext1.c
字号:
/*********************************************************************************************************
** Small RTOS
** The Real-Time Kernel
** (c) Copyright 2002-2003, chenmingji
** All Rights Reserved
** V1.50.0 内部测试版
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: ext1.c
**创 建 人: 陈明计
**最后修改日期: 2004年8月8日
**描 述: ext1源代码。
**
********************************************************************************************************/
#include "config.h"
uint8 random(uint8 seed)
{
uint16 temp;
temp = rand();
temp = temp % seed;
return temp;
}
void PC_DispChar (uint8 x, uint8 y, uint8 c, uint8 color)
{
OS_ENTER_CRITICAL();
UART0Putch(0xff);
UART0Putch(x);
UART0Putch(y);
UART0Putch(c);
UART0Putch(color);
OS_EXIT_CRITICAL();
}
void PC_DispStr (uint8 x, uint8 y, const char *s, uint8 color)
{
while (*s)
{
if (x >= DISP_MAX_X)
{
x = 0;
y++;
}
PC_DispChar(x, y, *s++, color);
x++;
}
OSTimeDly(10);
}
void PC_DispClrScr (uint8 color)
{
uint16 i,j;
for (i = 0; i < DISP_MAX_Y; i++)
{
for (j = 0; j < DISP_MAX_X; j++)
{
PC_DispChar(j, i, ' ', color);
}
OSTimeDly(10);
}
}
/*********************************************************************************************************/
OS_STK TaskStatStk[512];
OS_STK TaskStk[10][512];
const char *DisPlay = "0123456789";
/*********************************************************************************************************/
volatile unsigned long long OSIdleCtr;
volatile unsigned long long OSIdleCtrMax;
void TaskStat(void *Pdata);
void TaskB(void *Pdata);
int main(void)
{
OSInit();
TargetInit();
OSTaskCreate(TaskStat, NULL, &(TaskStatStk[512 - 1]), OS_LOWEST_PRIO - 1, 10, 512, USR32Mode, 0);
while(1)
{
OS_ENTER_CRITICAL();
OSIdleCtr++;
OS_EXIT_CRITICAL();
// PCON = PCON | 0x01; /* CPU进入休眠状态 */
}
return 0;
}
/*********************************************************************************************************/
extern int UART0SendBuf[];
void TaskStat(void *Pdata)
{
unsigned long long run;
unsigned long long max;
uint16 usage;
char b;
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_LIGHT_GRAY);
/* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
PC_DispStr( 0, 0, " Small RTOS, the Real-Time Kernel(For ARM7TDMI ", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
PC_DispStr( 0, 1, " Chen Ming Ji ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 2, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 3, " EXAMPLE #1 ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 22, " ", DISP_FGND_BLACK + DISP_BGND_GREEN);
PC_DispStr( 0, 23, " ", DISP_FGND_BLACK + DISP_BGND_GREEN);
PC_DispStr( 0, 24, " CPU Usage: % ", DISP_FGND_BLACK + DISP_BGND_GREEN);
while (QueueNData(UART0SendBuf));
OSTimeDly(OS_TICKS_PER_SEC);
OSIdleCtr = 0L;
OSTimeDly(OS_TICKS_PER_SEC);
OSIdleCtrMax = OSIdleCtr;
OSTaskCreate(TaskB, (void *)(DisPlay + 0), &(TaskStk[0][512 - 1]), 5, 0, 512, USR32Mode, 0);
OSTaskCreate(TaskB, (void *)(DisPlay + 1), &(TaskStk[1][512 - 1]), 5, 1, 512, USR32Mode, 0);
OSTaskCreate(TaskB, (void *)(DisPlay + 2), &(TaskStk[2][512 - 1]), 5, 2, 512, USR32Mode, 0);
OSTaskCreate(TaskB, (void *)(DisPlay + 3), &(TaskStk[3][512 - 1]), 5, 3, 512, USR32Mode, 0);
OSTaskCreate(TaskB, (void *)(DisPlay + 4), &(TaskStk[4][512 - 1]), 5, 4, 512, USR32Mode, 0);
OSTaskCreate(TaskB, (void *)(DisPlay + 5), &(TaskStk[5][512 - 1]), 5, 5, 512, USR32Mode, 0);
OSTaskCreate(TaskB, (void *)(DisPlay + 6), &(TaskStk[6][512 - 1]), 5, 6, 512, USR32Mode, 0);
OSTaskCreate(TaskB, (void *)(DisPlay + 7), &(TaskStk[7][512 - 1]), 5, 7, 512, USR32Mode, 0);
OSTaskCreate(TaskB, (void *)(DisPlay + 8), &(TaskStk[8][512 - 1]), 5, 8, 512, USR32Mode, 0);
OSTaskCreate(TaskB, (void *)(DisPlay + 9), &(TaskStk[9][512 - 1]), 5, 9, 512, USR32Mode, 0);
max = OSIdleCtrMax / 1000;
b = '_';
while (1)
{
OSIdleCtr = 0;
OSTimeDly(OS_TICKS_PER_SEC);
run = OSIdleCtr;
usage = run / max;
usage = 1000 - usage;
PC_DispChar(22, 24, b, DISP_FGND_YELLOW + DISP_BGND_BLUE);
PC_DispChar(23, 24, usage / 1000 + '0', DISP_FGND_YELLOW + DISP_BGND_BLUE);
PC_DispChar(24, 24, (usage % 1000) / 100 + '0', DISP_FGND_YELLOW + DISP_BGND_BLUE);
PC_DispChar(25, 24, (usage % 100) / 10 + '0', DISP_FGND_YELLOW + DISP_BGND_BLUE);
PC_DispChar(26, 24, '.', DISP_FGND_YELLOW + DISP_BGND_BLUE);
PC_DispChar(27, 24, usage % 10 + '0', DISP_FGND_YELLOW + DISP_BGND_BLUE);
if (b == '_')
{
b = ' ';
}
else
{
b = '_';
}
}
}
/*********************************************************************************************************/
void TaskB(void *Pdata)
{
uint8 x;
uint8 y;
char DisPlay;
DisPlay = ((char *)Pdata)[0];
while (1)
{
OS_ENTER_CRITICAL();
x = random(80);
y = random(16);
OS_EXIT_CRITICAL();
PC_DispChar(x, y + 5, DisPlay, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTimeDly(5);
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -