📄 main.c
字号:
#include "config.h"
//#include "stdlib.h"
//#include "uart.h"
#define DS2 (1 << 24) // P1.24控制DS2
#define DS3 (1 << 25) // P0.25控制DS3
#define DS4 (1<<8)
#define DIS1 20 //P1.20
#define DIS2 21 //P1.21
#define DIS3 22 //P1.22
#define DIS4 23 //P1.23
#define Task0StkLengh 64 // 定义用户任务0的堆栈长度 //
#define TaskDS2StkSize 64 // 定义任务TaskDS2的堆栈长度//
#define TaskDS3StkSize 64 // 定义任务TaskDS3的堆栈长度//
#define TaskDS4StkSize 64 //定义任务TaskDS4的堆占长度//
#define TaskDS5StkSize 64 //定义任务TaskDS5 的堆占长度//
#define TaskDS6StkSize 64 //定义任务TaskDS6的堆占长度//
#define TaskDS7StkSize 64 //定义任务TaskDS7的堆占长度//
#define TaskDS8StkSize 64 //定义任务TaskDS8的堆占长度//
OS_STK Task0Stk [Task0StkLengh]; // 定义用户任务0的堆栈//
OS_STK TaskDS2Stk [TaskDS2StkSize]; // 定义任务TaskDS2的堆栈//
OS_STK TaskDS3Stk [TaskDS3StkSize]; // 定义任务TaskDS3的堆栈 //
OS_STK TaskDS4Stk [TaskDS4StkSize]; //定义任务TaskDS4的堆占//
OS_STK TaskDS5Stk [TaskDS5StkSize]; //定义任务TaskDS5的堆占//
OS_STK TaskDS6Stk [TaskDS6StkSize]; //定义任务TaskDS6的堆占//
OS_STK TaskDS7Stk [TaskDS7StkSize]; //定义任务TaskDS7的堆占//
OS_STK TaskDS8Stk [TaskDS8StkSize]; //定义任务TaskDS8的堆占//
void Task1(void *pdata); // Task0 任务0 //
void TaskDS2(void *pdata); // 任务TaskDS2//
void TaskDS3(void *pdata); // 任务TaskDS3//
void TaskDS4(void *pdata); //任务TaskDS4//
void TaskDS5(void *pdata); //任务TaskDS5//
void TaskDS6(void *pdata); //任务TaskDS6//
void TaskDS7(void *pdata); //任务TaskDS7//
void TaskDS8(void *pdata);
OS_EVENT *uartsem;
OS_EVENT *databox;
OS_EVENT *dispsem;
/*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :c语言的主函数,由它启动多任务环境
*********************************************************************************************************
*/
int main (void)
{
OSInit ();
uartsem = OSSemCreate(1);
dispsem = OSSemCreate(0);
databox = OSMboxCreate((void*)0);
OSTaskCreate (Task1,(void *)0, &Task0Stk[Task0StkLengh - 1], 2);
OSStart ();
return 0;
}
/*
********************************************************************************************************
** Task0 任务0
** 完成目标板初始化和创建TaskLED1任务
********************************************************************************************************
*/
void Task1 (void *pdata)
{
pdata = pdata;
TargetInit ();
OSTaskCreate (TaskDS2,(void *)0, &TaskDS2Stk[TaskDS2StkSize - 1], 3);
OSTaskCreate (TaskDS3,(void *)0, &TaskDS3Stk[TaskDS3StkSize - 1], 4);
OSTaskCreate (TaskDS4,(void *)0, &TaskDS4Stk[TaskDS4StkSize - 1], 5);
OSTaskCreate (TaskDS5,(void *)0, &TaskDS5Stk[TaskDS5StkSize - 1], 6);
OSTaskCreate (TaskDS6,(void *)0, &TaskDS6Stk[TaskDS6StkSize - 1], 7);
OSTaskCreate (TaskDS7,(void *)0, &TaskDS7Stk[TaskDS7StkSize - 1], 8);
OSTaskCreate (TaskDS8,(void *)0, &TaskDS8Stk[TaskDS8StkSize - 1], 9);
while (1)
{
OSTimeDly(10);
}
}
/*
********************************************************************************************************
** TaskDS2
** DS2任务 //
********************************************************************************************************
*/
void TaskDS2(void *pdata)
{
pdata = pdata; // 避免编译警告 //
PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]选择GPIO
IO1DIR |= DS2; // 设置LED1控制口输出 //
IO1SET = DS2;
for (;;)
{
IO1CLR = DS2;
OSTimeDly(OS_TICKS_PER_SEC / 4);
IO1SET = DS2;
OSTimeDly(OS_TICKS_PER_SEC / 2);
}
}
/*
********************************************************************************************************
** TaskDS3
** DS1任务
********************************************************************************************************
*/
void TaskDS3(void *pdata)
{
pdata = pdata; // 避免编译警告 //
PINSEL0 = 0x00000000; // 设置管脚连接GPIO
IO0DIR |= DS3; // 设置LED1控制口输出 //
IO0SET = DS3;
for (;;)
{
IO0CLR = DS3;
OSTimeDly(OS_TICKS_PER_SEC / 5);
IO0SET = DS3;
OSTimeDly(OS_TICKS_PER_SEC / 3);
}
}
/********************************************************************************/
/* 函数名:TaskDS4() */
/* 功能 :蜂鸣器鸣叫 */
/* 入口参数:*pdata */
/* 出口参数:无 */
/*******************************************************************************/
void TaskDS4(void *pdata)
{
pdata = pdata; // 避免编译警告 //
PINSEL0 = 0x00000000; // 设置管脚连接GPIO
IO0DIR |= DS4; // 设置LED1控制口输出 //
IO0SET = DS4;
for (;;)
{
IO0CLR = DS4;
OSTimeDly(OS_TICKS_PER_SEC / 5);
IO0SET = DS4;
OSTimeDly(OS_TICKS_PER_SEC / 3);
}
}
/*******************************************************************************/
/* 函数名:TaskDS5() */
/* 功能: 使用信号量串口发送str1[] */
/* 入口参数:*pdata */
/* 出口参数:无 */
/********************************************************************************/
void TaskDS5(void *pdata)
{
uint8 err;
uint8 str1[]="I AM TASK DS5." ;
pdata = pdata;
UART0Init(9600);
for(;;)
{
OSSemPend(uartsem,0,&err);
uart0_sendstr(str1);
OSTimeDly(OS_TICKS_PER_SEC / 10);
err = OSSemPost(uartsem);
}
}
/*********************************************************************************/
/* 函数名:TaskDS6() */
/* 功能:使用信号量串口发送str2[] */
/* 入口参数:*pdata */
/* 出口参数:无 */
/*********************************************************************************/
void TaskDS6(void *pdata)
{
uint8 err;
uint8 str2[]="i am task ds6." ;
pdata = pdata;
for(;;)
{
OSSemPend(uartsem,0,&err);
uart0_sendstr(str2);
err = OSSemPost(uartsem);
}
}
/**********************************************************************************/
/* 函数名:TaskDS7(void *pdata) */
/* 功能:键盘扫描 使用消息邮箱发送键值 */
/* 入口参数: *pdata */
/* 出口参数:无 */
/**********************************************************************************/
void TaskDS7(void *pdata)
{
uint32 data;
// uint8 err;
pdata = pdata;
IO0DIR |=(1<<10)|(1<<11)|(1<<12)|(1<<13);
for(;;)
{
data = key_scan();
OSMboxPost(databox,(void*)&data);
OSTimeDly(10);
}
}
/*********************************************************************************/
/* 函数名:TaskDS8(void *pdata); */
/* 功能:接受消息邮箱的消息 送到LED显示 */
/* 入口参数: *pdata */
/* 出口参数:无 */
/*********************************************************************************/
void TaskDS8(void *pdata)
{
unsigned char *msg;
unsigned char y;
uint8 err;
pdata = pdata;
IO0DIR|=(uint32)(1<<7);
IO1DIR|=(0x0f<<DIS1);
IO1SET|=(0x0f<<DIS1);
MSPI_Init();
for (;;)
{
msg = OSMboxPend(databox,10,&err);
y = *msg;
OSSemPend(dispsem,0,&err);
IO1SET|=(0x0f<<DIS1);
MSPI_SendData(y); // 发送显示数据
IO1CLR|=(1<<(DIS1));
}
}
/*********************************************************************************************************/
/** End Of File */
/********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -