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

📄 main.c

📁 ucos_ii在mini2440上的移植KEIL编译环境
💻 C
字号:
#include <stdio.h> 
#include <S3C2440.h>
#include <stdlib.h>
#include <time.h>
#include <rt_heap.h>
#include <locale.h>
#include <string.h>
#include "global.h"
#include "../ucos/includes.h"

#define SIZE 2

#define BlockNum 100
#define BlockSize 32

OS_STK	Task1Stk [Task0StkLengh];       // Define the Task1 stack
OS_STK	Task2Stk [Task1StkLengh];       // Define the Task2 stack
OS_STK	Task3Stk [Task2StkLengh];       // Define the Task3 stack   
OS_STK	Task4Stk [Task3StkLengh];       // Define the Task4 stack

OS_EVENT * semp;
INT8U err;

OS_EVENT * QSem;				//handle of mes fifo	
void * MyArrayOfMsg[SIZE];		//use for mes fifo

OS_MEM * PCommRam;
INT8U CommRam[BlockNum][BlockSize];

typedef struct Qfifo_t
{
	char data[10];
		
}Qfifo_t;
__packed
struct test1
{   int a;
   char b;
   short c;} ;

__packedstruct test
{  struct test1 e;
  __packed int a;
  __packed char b;
  __packed short c;} ;


void task3(void *pdata);
void task1(void *pdata)
{
	char ch[20]={0};
	TIMER_Start(1);
	OSStatInit();	
	
	while(1)
	{
		sprintf(ch,"%d",sizeof(struct test));
		
		LCD_DrawText(20, 140, "task1 is runing...", 18,	RGB(255, 0, 255),RGB(0, 0, 0));
		LCD_DrawText(20, 20, ch, strlen(ch),	RGB(255, 0, 255),RGB(0, 0, 0));
		//LCD_ClearScreen(RGB(0, 0, 0));
		//OSTaskDel(OS_PRIO_SELF);   //删除自己
		OSTimeDlyHMSM (0,0,0,1);
		//OSTimeDly(20);//20一秒	
		LCD_DrawText(20, 140, "                  ", 18,	RGB(0, 0, 0),RGB(255, 0, 255));
		//OSTimeDly(80);//20一秒	
		//OSSemPost(semp);//发送信号量
	}

}

void task2(void *pdata)
{
	Qfifo_t * sendmes;
	while(1)
	{
		//OSTaskCreate (task3,(void *)0, &Task3Stk[Task2StkLengh - 1], Task2Prio);
		//OSTaskResume(Task2Prio);//恢复挂起任务
		//OSTimeDly(100);//20一秒
		//OSSemPend(semp,0,&err);//等待信号量
		LCD_DrawText(40, 140, "task2 is runing...", 18,	RGB(255, 0, 255),RGB(0, 0, 0));
		//OSTimeDly(20);//20一秒	
		//LCD_DrawText(40, 140, "                  ", 18,	RGB(0, 0, 0),RGB(255, 0, 255));
		//OSSemPost(semp);//发送信号量

		//sendmes = (Qfifo_t *)malloc(sizeof(Qfifo_t));
		sendmes = (Qfifo_t *)OSMemGet(PCommRam,&err);
		strcpy(sendmes->data,"hello");
		OSQPost(QSem,(void *)sendmes);
		//OSTimeDly(40);//20一秒
		//sendmes=(Qfifo_t *)malloc(sizeof(Qfifo_t));
		sendmes = (Qfifo_t *)OSMemGet(PCommRam,&err);
		strcpy(sendmes->data,"world");
		OSQPost(QSem,(void *)sendmes);

		OSTimeDly(40);//20一秒
		LCD_DrawText(40, 140, "                  ", 18,	RGB(0, 0, 0),RGB(255, 0, 255));
		OSTimeDly(20);//20一秒	
	}
}

void task3	(void *pdata)
{
	char ch[20] = {0};
	while(1)
	{
		Qfifo_t * getmes;
		memset(getmes->data,0,sizeof(getmes->data));
		memset(ch,0,sizeof(ch));
		
		getmes = (Qfifo_t *)OSQPend(QSem,0,&err);	
		strcpy(ch,getmes->data);		

		LCD_DrawText(100,140,getmes->data,strlen(getmes->data),RGB(255, 0, 255),RGB(0, 0, 0));
		//free(getmes);
		//OSTimeDly(100);//20一秒
		//OSSemPend(semp,0,&err);//等待信号量

		LCD_DrawText(60, 140, "task3 is runing...", 18,	RGB(255, 0, 255),RGB(0, 0, 0));
		//OSTimeDly(20);//20一秒	
		//LCD_DrawText(60, 140, "                  ", 18,	RGB(0, 0, 0),RGB(255, 0, 255));
		//OSTimeDly(20);//20一秒
		//OSTaskDel(OS_PRIO_SELF);   //删除自己
		//OSTaskSuspend(OS_PRIO_SELF); //挂起自己
	}
}
	 
void task4	(void *pdata)
{
	char ch[20] = {0};
	while(1)
	{
		Qfifo_t * getmes;
		memset(getmes->data,0,sizeof(getmes->data));
		memset(ch,0,sizeof(ch));
		
		getmes = (Qfifo_t *)OSQPend(QSem,0,&err);	
		strcpy(ch,getmes->data);		

		LCD_DrawText(120,140,getmes->data,strlen(getmes->data),RGB(255, 0, 255),RGB(0, 0, 0));
		//free(getmes);
		//OSTimeDly(100);//20一秒
		//OSSemPend(semp,0,&err);//等待信号量

		LCD_DrawText(80, 140, "task4 is runing...", 18,	RGB(255, 0, 255),RGB(0, 0, 0));
		//OSTimeDly(20);//20一秒	
		//LCD_DrawText(60, 140, "                  ", 18,	RGB(0, 0, 0),RGB(255, 0, 255));
		//OSTimeDly(20);//20一秒
		//OSTaskDel(OS_PRIO_SELF);   //删除自己
		//OSTaskSuspend(OS_PRIO_SELF); //挂起自己
	}
}

void Main()
{		

	_init_alloc(0x31000000,0x32000000);
	setlocale(LC_ALL,"c");
	
	/*
	while(1)
	{	
	  //event_listen();
	}
	*/
	IRQ_Init();
   	TIMER_Init(1,249,2);
	TIMER_Create(1,1250,OSTimeTick);//UCOS时钟周期50ms
 	OSInit();

	if(system_init() == -1)
	{
		return ;
	}

	semp = OSSemCreate(0);//创建信号量
	QSem = OSQCreate(&MyArrayOfMsg[0],SIZE);//创建消息队列
	PCommRam = OSMemCreate(CommRam,BlockNum,BlockSize,&err); // 创建内存分区	

	//初始化UCOS时基
  	OSTimeSet(0);

	OSTaskCreate (task1,(void *)0, &Task1Stk[Task0StkLengh - 1], Task0Prio);
	OSTaskCreate (task2,(void *)0, &Task2Stk[Task1StkLengh - 1], Task1Prio);
	OSTaskCreate (task3,(void *)0, &Task3Stk[Task2StkLengh - 1], Task2Prio);
	OSTaskCreate (task4,(void *)0, &Task4Stk[Task3StkLengh - 1], Task3Prio);
		
	OSStart();
}

⌨️ 快捷键说明

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