📄 main.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 + -