📄 p89v51.c
字号:
/*********************************************************************************************************
** Small RTOS(51)
** The Real-Time Kernel(For Keil c51)
**
** (c) Copyright 2002-2003, chenmingji
** All Rights Reserved
**
** V1.20.0
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: ext2.c
**创 建 人: 陈明计
**最后修改日期: 2003年8月3日
**描 述: ext2源代码。
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版 本: V0.50
** 日 期: 2002年2月22日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版 本: V1.11.0
** 日 期: 2003年12月2日
** 描 述: 删除TaskF代码
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版 本: V1.12.0
** 日 期: 2003年12月30日
** 描 述: 无变化
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版 本: V1.20.0
** 日 期: 2003年8月3日
** 描 述: 根据新版本要求修改
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
#include "led.h"
void Task0(void);
void Task1(void);
void Task2(void);
void Task3(void);
void Task4(void);
void Task5(void);
void Task6(void);
void Task7(void);
void Task8(void);
void Task9(void);
//主函数
void main(void)
{
static uint16 i;
i=0;
OSInit();
TMOD = (TMOD & 0XF0) | 0X01;
TL0 = 0x0;
TH0 = 0x0;
TR0 = 1;
ET0 = 1;
TF0 = 0;
//只建立两个任务来验证如何删除任务
OSTaskCreate(Task0, NULL, 0);
OSTaskCreate(Task1, NULL, 1);
//OSTaskCreate(Task2, NULL, 2);
//OSTaskCreate(Task3, NULL, 3);
//OSTaskCreate(Task4, NULL, 4);
//OSTaskCreate(Task5, NULL, 5);
//OSTaskCreate(Task6, NULL, 6);
//OSTaskCreate(Task7, NULL, 7);
//OSTaskCreate(Task8, NULL, 8);
//OSTaskCreate(Task9, NULL, 9);
while(1)
{
i+=1;
if ( i % 9000 == 0 )
{
reserved_led_off();
PCON = PCON & 0xfc | 0x01; /* CPU进入休眠状态 */
}
else
{
reserved_led_on();
}
//PCON = PCON & 0xfc | 0x01; /* CPU进入休眠状态 */
//PCON = PCON & 0xfc | 0x02; /* CPU进入掉电状态 */
}
}
//任务0
void Task0(void)
{
static uint8 i;
i=0;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i == 20 )
{
setting_led_on();
//OSTaskDel(0); //当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
if ( OSTaskDel(1) ) //这里好像有问题,虽然checkcode_led_on()被执行了,但是Task1仍然在执行,并没有被删除
{
checkcode_led_on();//用这个led来指示Task1是否被删除
}
break;
}
if ( i % 2 == 0 )
{
setting_led_on(); //使用led灯的闪烁来表明Task0在运行
}
else
{
setting_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,2);
}
}
//任务1
void Task1(void)
{
static uint8 i;
i=0;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i == 20 )
{
rob_led_on();
// OSTaskDel(1); //当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
// break;
}
if ( i % 2 == 0 )
{
rob_led_on(); //使用led灯的闪烁来表明Task1在运行
}
else
{
rob_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,4);
}
}
//任务2
void Task2(void)
{
static uint8 i;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i == 20 )
{
steal_led_on();
OSTaskDel(2); //当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
break;
}
if ( i % 2 == 0 )
{
steal_led_on();
}
else
{
steal_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,6);
}
}
//任务3
void Task3(void)
{
static uint8 i;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i == 20 )
{
gas_led_on();
OSTaskDel(3); //当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
break;
}
if ( i % 2 == 0 )
{
gas_led_on();
}
else
{
gas_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,8);
}
}
//任务4
void Task4(void)
{
static uint8 i;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i == 20 )
{
fire_led_on();
OSTaskDel(4); //当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
break;
}
if ( i % 2 == 0 )
{
fire_led_on();
}
else
{
fire_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,10);
}
}
//任务5
void Task5(void)
{
static uint8 i;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i == 20 )
{
rescue_led_on();
OSTaskDel(5); //当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
break;
}
if ( i % 2 == 0 )
{
rescue_led_on();
}
else
{
rescue_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,12);
}
}
//任务6
void Task6(void)
{
static uint8 i;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i == 20 )
{
special_led_on();
OSTaskDel(6); //当运行20次(也就是灯闪烁10次)后让灯常量,并且删除任务自己
break;
}
if ( i % 2 == 0 )
{
special_led_on();
}
else
{
special_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,14);
}
}
//任务7
void Task7(void)
{
static uint8 i;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i % 2 == 0 )
{
checkcode_led_on();
}
else
{
checkcode_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,16);
}
}
//任务8
void Task8(void)
{
static uint8 i;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i % 2 == 0 )
{
linedown_led_on();
}
else
{
linedown_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,18);
}
}
//任务9
void Task9(void)
{
static uint8 i;
while (1)
{
OS_ENTER_CRITICAL();
//任务代码
i+=1;
if ( i % 2 == 0 )
{
reserved_led_on();
}
else
{
reserved_led_off();
}
OS_EXIT_CRITICAL();
OSWait(K_TMO,20);
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -