📄 task.c
字号:
#define IN_TASK
#include "config.h"
#include "task.h"
#include "spi.h"
OS_STK TaskStartStk[TaskStkLengh]; /* Startup task stack */
OS_STK Task1Stk[TaskStkLengh]; /* Task #1 task stack */
OS_STK Task2Stk[TaskStkLengh]; /* Task #2 task stack */
OS_STK Task3Stk[TaskStkLengh];
OS_STK Task4Stk[TaskStkLengh];
OS_EVENT *AckMbox; /* Message mailboxes for Tasks #1 and #2 */
OS_EVENT *TxMbox1;
OS_EVENT *TxMboxSPI;
OS_EVENT *AckMboxSPI;
OS_EVENT *MainSem; //用于整个程序的信号量
uint32 LED1 = (1 << 18); // P1.18控制LED1,高电平点亮
uint32 LED2 = (1 << 17);
void Task1 (void *pdata)
{
char *rxmsg;
INT8U err;
char txmsg=1;
pdata = pdata;
TargetInit ();
OSStatInit();
while (1)
{
IO1SET = LED1; // LED1点亮
OSTimeDlyHMSM(0, 0, 0, 100 );
IO1CLR = LED1; // LED1熄灭
OSTimeDlyHMSM(0, 0, 0, 100 );
IO1SET = LED1; // LED1点亮
OSTimeDlyHMSM(0, 0, 0, 100 );
IO1CLR = LED1; // LED1熄灭
OSTimeDlyHMSM(0, 0, 0, 100 );
OSMboxPost(TxMbox1, (void *)&txmsg); /* Send message to Task #2*/
rxmsg = (char *)OSMboxPend(AckMboxSPI, 0, &err); /* Wait for acknowledgement from Task #2 */
}
}
void Task2 (void *pdata)
{
char *rxmsg;
INT8U err;
pdata = pdata;
while (1)
{
OSSemPend(MainSem, 0, &err);
rxmsg = (char *)OSMboxPend(TxMbox1, 0, &err); /* Wait for message from Task #1 */
IO1SET=((*rxmsg)<<17); //控制P0.0~P0.7
txmsgSPI++;
//OSMboxPost(AckMbox, (void *)1);
OSMboxPost(TxMboxSPI, (void *)&txmsgSPI);
OSTimeDlyHMSM(0, 0, 0, 500); /* Wait 10 milsecond */
IO1CLR=LED2;
OSSemPost(MainSem);
}
}
void Task3 (void *pdata)
{
uint8 temp;
INT8U err;
char *rxmsgSPI;
pdata = pdata; /* 避免编译警告 */
//SPIInit(0x30); /* 目标板初始化 */
PINSEL0 = (PINSEL0 & 0xffff00ff) | 0x1500;
IO0DIR = HC595_CS;
while (1)
{
OSSemPend(MainSem, 0, &err);
OSMboxPost(AckMboxSPI, (void *)1);
rxmsgSPI = (char *)OSMboxPend(TxMboxSPI, 0, &err);
SPIStart();
IO0CLR = HC595_CS;
SPIRW(&temp, ~ShowTable[*rxmsgSPI]);
IO0SET = HC595_CS;
SPIEnd();
OSTimeDlyHMSM(0, 0, 0, 300 ); /* Wait 1 second */
OSSemPost(MainSem);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -