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

📄 ex1.c

📁 ucos在ti5402的移植,其中包括两个基本任务的建立
💻 C
字号:
/*
*********************************************************************************************************
*                                                uC/OS-II
*                                          The Real-Time Kernel
*
*                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
*                                           All Rights Reserved
*
*                                   Test codes for TMS320C5402
*
* File : EX1.C
* By   : Zhang Zhenhua
*********************************************************************************************************
*/
#include "includes.h" 
#include <stdio.h>

#define  N_TASKS                        2                          
OS_EVENT        * AckMbox;                           
OS_EVENT        * TxMbox;

OS_STK           TaskStk[N_TASKS][OS_DEF_TASK_STK_SIZE];     /* Tasks stacks                                  */
OS_STK           TaskStartStk[OS_DEF_TASK_STK_SIZE];

              
void   TaskStart(void *data);    /* Function prototypes of Startup task           */ 
void   Task1(void *data);                              /* Function prototypes of tasks                  */
void   Task2(void *data);

							  

short counter1, counter2, counter3;


void main()
+{
counter1=counter2=counter3=0;
Init_Timer();                   //定时器初始化

OSInit();                      //ucos初始化
OSTaskCreate(TaskStart,(void *)&counter1,(void *)&TaskStartStk[OS_DEF_TASK_STK_SIZE - 1], 1);
OSStart();
}



void TaskStart(void *data)
{   UBYTE err;
    data=data;
    Start_Timer();         
	OSTaskCreate(Task1, (void *)&counter2, (void *)&TaskStk[0][OS_DEF_TASK_STK_SIZE - 1], 5);
	OSTaskCreate(Task2, (void *)&counter3, (void *)&TaskStk[1][OS_DEF_TASK_STK_SIZE - 1], 6);
	
	AckMbox = OSMboxCreate((void*)0);       //建立油箱机制
                     
    TxMbox  = OSMboxCreate((void*)0);
	     
	for (;;) 
	{puts("11111"); 
    OSTimeDly(10);                                                             
    }
}
		

void Task1 (void *data)
{
    UBYTE err; 
    char txmsg;
    data=data;
    txmsg = 'A';
    for (;;) {
    	while (txmsg <= 'Z')
    	{
    		puts("Post ");putchar(txmsg);putchar('\n');
    		OSMboxPost(TxMbox, (void *)&txmsg);
    	OSMboxPend(AckMbox, 0, &err);
    	txmsg++;
    	}
    	txmsg = 'A';
    
    }
} 

void Task2(void *data)
{
	char *rxmsg;
    UBYTE err;
    data=data;
    for (;;) {
    	rxmsg = (char *)OSMboxPend(TxMbox, 0, &err);  //获得对资源的访问权,这里油箱作为二值信号亮
		puts("Received ");putchar(*rxmsg);putchar('\n');
		
    	OSTimeDly(0.1);   //这里时间设得很小是为了防止从第二次以后任务1给任务2发消息但任务2还在挂起
    	OSMboxPost(AckMbox, (void *)1);  //释放对资源的访问权
    }
}
		
		

	

⌨️ 快捷键说明

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