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

📄 main.c

📁 主要在PROTUES中实现移植的一个简单程序。
💻 C
字号:

#include "config.h"
#include "stdlib.h"

#define	TaskStkLengh	64			                 //Define the Task stack length 定义用户任务的堆栈长度

#define          TASK_START_PRIO    2                /* Application tasks priorities                  */
#define          TASK_1_PRIO        0
#define          TASK_2_PRIO        1

OS_STK           TaskStartStk[TaskStkLengh];         /* Startup    task stack                         */                        
OS_STK           Task1Stk[TaskStkLengh];             /* Task #1    task stack                         */
OS_STK           Task2Stk[TaskStkLengh];             /* Task #2    task stack                         */

OS_EVENT        *AckMbox;                            /* Message mailboxes for Tasks #1 and #2         */
OS_EVENT        *TxMbox;
 

void    TaskStart(void *pdata);                     //Function prototypes of tasks
void 	Task1(void *pdata);			                //Task1 任务1
void 	Task2(void *pdata);			                //Task2 任务2


const uint32 LED1 = (1 << 18);	                    // P1.18控制LED1,高电平点亮
const uint32 LED2 = (1 << 0);	                    // P0.0控制LED2,高电平点亮 

void DelayNS (uint32 dly)
{
	uint32 i;
	
	for ( ; dly>0; dly--)
		for (i=0; i<50000; i++);
}


int main (void)
{
	PINSEL2 = PINSEL2 & (~0x08);                  // P1.18连接GPIO
	IO1DIR  = LED1;				                  // 设置LED1控制口为输出
	PINSEL0 = PINSEL0 & (~0x0F);                  // P0.0连接GPIO
    IO0DIR  = LED2;				                  // 设置LED2控制口为输出
	IO0CLR=0x000000FF;                            //控制P0.0~P0.7 
	
	OSInit ();																										
	OSTaskCreate (TaskStart,(void *)0, &TaskStartStk[TaskStkLengh - 1], TASK_START_PRIO);		
	OSStart ();
	return 0;															
}
/*********************************************************************************************************
**                            Task     任务
********************************************************************************************************/
void  TaskStart (void *pdata)
{
    pdata = pdata;
    TargetInit ();
    OSStatInit();
    AckMbox = OSMboxCreate((void *)0);                     /* Create 2 message mailboxes               */
    TxMbox  = OSMboxCreate((void *)0);

    OSTaskCreate (Task1,(void *)0, &Task1Stk[TaskStkLengh - 1], TASK_1_PRIO);//创建两个任务
    OSTaskCreate (Task2,(void *)0, &Task2Stk[TaskStkLengh - 1], TASK_2_PRIO);
}

void Task1	(void *pdata)
{
	INT8U txmsg;
	INT8U  err; 
	pdata = pdata;
	//TargetInit ();
		
	txmsg=1;
	while (1)
	{
		IO1SET = LED1;			              // LED1点亮
		DelayNS(50);
		IO1CLR = LED1;			              // LED1熄灭
		DelayNS(50);
		IO1SET = LED1;			              // LED1点亮
		DelayNS(50);
		IO1CLR = LED1;			              // LED1熄灭
		DelayNS(50);
		OSMboxPost(TxMbox, (void *)&txmsg);  /* Send message to Task #2                            */
        OSMboxPend(AckMbox, 0, &err);        /* Wait for acknowledgement from Task #2              */
	    OSTimeDlyHMSM(0, 0, 1, 0 );          /* Wait 1 second                                 */
	    txmsg=0;
	}
}

void Task2	(void *pdata)
{

    char   *rxmsg;
    INT8U  err;
    pdata = pdata;
    
    PINSEL0 = PINSEL0 & (~0x0F);            // P0[0:7]连接GPIO
    IO0DIR  = LED2;				            // 设置LED2控制口为输出
	while (1)
	{
        rxmsg = (char *)OSMboxPend(TxMbox, 0, &err);                    /* Wait for message from Task #1 */
        IO0CLR=0x000000FF;                                              //控制P0.0~P0.7 
        IO0SET=*rxmsg;
        OSTimeDlyHMSM(0, 0, 0, 100);                                    /* Wait 10 milsecond                 */
        OSMboxPost(AckMbox, (void *)1);
    }

}

   
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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