⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex1.c

📁 Small RTOS 移植到AVR下用IAR编译的
💻 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 "includes.h"

void TaskA(void *Pdata);
void TaskB(void *Pdata);
void TaskC(void *Pdata);
void TaskD(void *Pdata);

OS_STK TaskStk[3][OS_TASK_STK_SIZE];

int main(void)
{
    OSInit();

    OSTaskStkSize=OS_TASK_STK_SIZE;
	OSTaskStkSizeHard=OS_TASK_STK_SIZE_HARD;

	OSSetRoundTick(6,2);
    OSTaskCreate(TaskA, NULL, &(TaskStk[0][OSTaskStkSize -1]), 4, 0, OSTaskStkSize, 0, 0);
	
	_SEI();				/* 重要: CPU进入休眠之前必须开中断 */
	
    while(1)
    {
		_SLEEP(); 		/* CPU进入休眠状态 */
    }
}

void TaskA(void *Pdata)
{
    uint8 *p;
    uint8  c;

    Pdata = Pdata;
    TargetInit();
	
	OSTaskCreate(TaskB, NULL, &(TaskStk[1][OSTaskStkSize -1]), 5, 1, OSTaskStkSize, 0, 0);	
	/* 创建任务TaskB 处于就绪状态 */
    OSTaskCreate(TaskC, NULL, &(TaskStk[2][OSTaskStkSize -1]), 6, 2, OSTaskStkSize, 0, 0);	
	/* 创建任务TaskC 处于就绪状态 */
		
    c = '4'; 			/* 初始化发送消息的内容 */
	
    while (1)
    {
	
        OSMsgPost(2, &c);	/* 	向TaskID=2的任务(TaskC)发送消息	*/
							/*	消息内容为: 字符型变量 c 的地址	*/
							/*  TaskC 任务信息 得到消息位  置位	*/
		
        p = (uint8 *)OSMsgBackPend(0, &c);	/* 调整当前任务为等待消息回应状态(OS_STAT_MSG_BACK) */
											/* 并从对应的优先级链表中删除 						*/
											/* 任务自己放弃CPU	程序切换到优先级最高的就绪任务	*/
											/* 当任务调度再次执行TaskA时 						*/
											/* CPU将从该函数中OSSched()程序后开始执行			*/
											/* 返回值p为得到的消息 *p=6(0x1DE)					*/
        c = *p;			/* 更新发送消息的内容	*/
		
		
    }
}

void TaskB(void *Pdata)
{
    uint8 *p;
    uint8  c;

    Pdata = Pdata;
    c = '5';
    while (1)
    {
	  	OSMsgPost(2, &c);
        p = (uint8 *)OSMsgBackPend(0, &c);
        c = *p;
		
    }
}

void TaskC(void *Pdata)
{
    uint8 *p;
    TASK_ID TaskId;
    uint8  c, err;

    Pdata = Pdata;
    c = '6';
    while (1)
    {
	  	p = (uint8 *)OSMsgPend(0, &TaskId, &err);	/* 得到消息链表中一个消息 先进先出		*/
													/* 并将消息指针指向下一个将接受的消息 	*/
													/* TaskId返回该消息的发送任务			*/
													/* err返回操作是否成功					*/
        err = *p;
		
        OSMsgBackPost(TaskId, &c);		/* 任务TaskC向任务TaskId反馈消息	*/
		
    }
}


/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -