利用提供的uc-os工程,实现两个任务之间的通信。要求自行建立两个任务TaskA和TaskB,利用进程间通信工具mailbox进行实现,任务A定期发送(post)给任务B你的学号,和一个计数码,计数码每次发送自增1;任务B挂起(pend)在相同的mailbox上,接收到任务A从mailbox发送的数据后,打印出来你的名字+从任务A接收到的数据。
要求: 提供任务A和任务B输出的结果,任务A要打印出你的学号和序列号和一串A,任务b要打印出你的名字、学号和序列号以及一串B。
例如: 任务A打印: “ 学号:012345678:序列号 20—AAAAAAAAAAA” 任务B打印: “张某甲:学号02345678:序列号20----BBBBBBBBBBBBB”
源程序如下:
- /*
- *********************************************************************************************************
- * uC/OS-II
- * The Real-Time Kernel
- *
- * (c) Copyright 1998-2004, Micrium, Weston, FL
- * All Rights Reserved
- *
- *
- * WIN32 Sample Code
- *
- * File : APP.C
- * By : Eric Shufro
- *********************************************************************************************************
- */
- #include <includes.h>
- /*
- *********************************************************************************************************
- * CONSTANTS
- *********************************************************************************************************
- */
- #define TASK_STK_SIZE 128
- #define TASK_START_PRIO 5
- /*
- *********************************************************************************************************
- * VARIABLES
- *********************************************************************************************************
- */
- OS_STK AppStartTaskStk[TASK_STK_SIZE];
- /*
- *********************************************************************************************************
- * FUNCTION PROTOTYPES
- *********************************************************************************************************
- */
- static void AppStartTask(void *p_arg);
- #if OS_VIEW_MODULE > 0
- static void AppTerminalRx(INT8U rx_data);
- #endif
- /*
- *********************************************************************************************************
- * _tmain()
- *
- * Description : This is the standard entry point for C++ WIN32 code.
- * Arguments : none
- *********************************************************************************************************
- */
- void main(int argc, char *argv[])
- {
- INT8U err;
- #if 0
- BSP_IntDisAll(); /* For an embedded target, disable all interrupts until we are ready to accept them */
- #endif
- OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel" */
- OSTaskCreateExt(AppStartTask,
- (void *)0,
- (OS_STK *)&AppStartTaskStk[TASK_STK_SIZE-1],
- TASK_START_PRIO,
- TASK_START_PRIO,
- (OS_STK *)&AppStartTaskStk[0],
- TASK_STK_SIZE,
- (void *)0,
- OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
- #if OS_TASK_NAME_SIZE > 11
- OSTaskNameSet(APP_TASK_START_PRIO, (INT8U *)"Start Task", &err);
- #endif
- #if OS_TASK_NAME_SIZE > 14
- OSTaskNameSet(OS_IDLE_PRIO, (INT8U *)"uC/OS-II Idle", &err);
- #endif
- #if (OS_TASK_NAME_SIZE > 14) && (OS_TASK_STAT_EN > 0)
- OSTaskNameSet(OS_STAT_PRIO, "uC/OS-II Stat", &err);
- #endif
- OSStart(); /* Start multitasking (i.e. give control to uC/OS-II) */
- }
- /*$PAGE*/
- /*
- *********************************************************************************************************
- * STARTUP TASK
- *
- * Description : This is an example of a startup task. As mentioned in the book's text, you MUST
- * initialize the ticker only once multitasking has started.
- * Arguments : p_arg is the argument passed to 'AppStartTask()' by 'OSTaskCreate()'.
- * Notes : 1) The first line of code is used to prevent a compiler warning because 'p_arg' is not
- * used. The compiler should not generate any code for this statement.
- * 2) Interrupts are enabled once the task start because the I-bit of the CCR register was
- * set to 0 by 'OSTaskCreate()'.
- *********************************************************************************************************
- */
- void AppStartTask (void *p_arg)
- {
- p_arg = p_arg;
- #if 0
- BSP_Init(); /* For embedded targets, initialize BSP functions */
- #endif
- #if OS_TASK_STAT_EN > 0
- OSStatInit(); /* Determine CPU capacity */
- #endif
-
- while (TRUE) /* Task body, always written as an infinite loop. */
- {
- OS_Printf("Delay 1 second and print\n"); /* your code here. Create more tasks, etc. */
- OSTimeDlyHMSM(0, 0, 1, 0);
- }
- }
复制代码
所有资料51hei提供下载:
uCOS-II+VS2012_完美仿真.7z
(4.42 MB, 下载次数: 20)
|