X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
实时操作系统RTOS
[FreeRTOS] FreeRTOS学习笔记:通过任务参数传入需要打印输出的文本
caizhiwei
2015-4-22 14:43
楼主
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "croutine.h"
#include "bsp.h"
/*
**********************************************************************************************************
函数声明
**********************************************************************************************************
*/
static void AppTaskCreate (void);
extern void vSetupTimerTest( void );
/*
**********************************************************************************************************
变量声明
**********************************************************************************************************
*/
xTaskHandle xHandleTask3;
int8_t pcWriteBuffer[500];
/*
*********************************************************************************************************
* 函 数 名: main
* 功能说明: 标准c程序入口。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static const char *pcTextForTask1 ="Task 1 is running\r\n";
static const char *pcTextForTask2 ="Task 2 is running\t\n";
int main(void)
{
/* 硬件初始化 */
bsp_Init();
/* 创建任务 */
AppTaskCreate();
vSetupTimerTest();
/* 启动调度,开始执行任务 */
vTaskStartScheduler();
/*
If all is well we will never reach here as the scheduler will now be
running. If we do reach here then it is likely that there was insufficient
heap available for the idle task to be created.
*/
while (1);
}
/*
*********************************************************************************************************
* 函 数 名: vTask1
* 功能说明: LED闪烁
* 形 参:pvParameters 是在创建该任务时传递的形参
* 返 回 值: 无
*********************************************************************************************************
*/
void vTask1( void *pvParameters )
{
portTickType xDelay, xNextTime;
//char *pcTaskName = (char*)pvParameters;
xNextTime = xTaskGetTickCount () + ( portTickType ) 1000;
while(1)
{
bsp_LedToggle(LED1);
//printf("\r\n%s",pcTaskName);
printf("\r\n%s",(char*)(pvParameters));
/* 用vTaskDelay实现vTaskDelayUntil() */
xDelay = xNextTime - xTaskGetTickCount ();
xNextTime += ( portTickType ) 1000;
if( xDelay <= ( portTickType ) 1000 )
{
vTaskDelay( xDelay );
}
}
}
/*
*********************************************************************************************************
* 函 数 名: vTask2
* 功能说明: LED闪烁
* 形 参:pvParameters 是在创建该任务时传递的形参
* 返 回 值: 无
*********************************************************************************************************
*/
void vTask2( void *pvParameters )
{
portTickType xLastWakeTime;
const portTickType xFrequency = 100;
// Initialise the xLastWakeTime variable with the current time.
xLastWakeTime = xTaskGetTickCount();
while(1)
{
bsp_LedToggle(LED2); // Wait for the next cycle.
vTaskDelayUntil( &xLastWakeTime, xFrequency );
}
}
/*
*********************************************************************************************************
* 函 数 名: vTask3
* 功能说明: LED闪烁
* 形 参:pvParameters 是在创建该任务时传递的形参
* 返 回 值: 无
*********************************************************************************************************
*/
void vTask3( void *pvParameters )
{
while(1)
{
/* 挂起自己,可以写NULL或者xHandleTask3句柄,都可以的 */
vTaskSuspend( NULL );
bsp_LedToggle(LED3);
}
}
/*
*********************************************************************************************************
* 函 数 名: vTask4
* 功能说明: LED闪烁
* 形 参:pvParameters 是在创建该任务时传递的形参
* 返 回 值: 无
*********************************************************************************************************
*/
void vTask4( void *pvParameters )
{
portTickType xLastWakeTime;
const portTickType xFrequency = 1000;
// Initialise the xLastWakeTime variable with the current time.
xLastWakeTime = xTaskGetTickCount();
while(1)
{
vTaskResume(xHandleTask3);
vTaskList((char *)&pcWriteBuffer);
printf("%s\r\n", pcWriteBuffer);
vTaskGetRunTimeStats(( char *)&pcWriteBuffer);
printf("%s\r\n", pcWriteBuffer);
vTaskDelayUntil( &xLastWakeTime, xFrequency );
}
}
/*
*********************************************************************************************************
* 函 数 名: AppTaskCreate
* 功能说明: 创建应用任务
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void AppTaskCreate (void)
{
/* Create one task. */
xTaskCreate( vTask1, /* Pointer to the function that implements the task. */
"Task 1", /* Text name for the task. This is to facilitate debugging only. */
500, /* Stack depth in words. */
(void*)pcTextForTask1, /*通过任务参数传入需要打印输出的文本. */
1, /* This task will run at priority 1. */
NULL ); /* We are not using the task handle. */
/* Create one task. */
xTaskCreate( vTask2, /* Pointer to the function that implements the task. */
"Task 2", /* Text name for the task. This is to facilitate debugging only. */
500, /* Stack depth in words. */
NULL, /* We are not using the task parameter. */
2, /* This task will run at priority 2. */
NULL ); /* We are not using the task handle. */
/* Create one task. */
xTaskCreate( vTask3, /* Pointer to the function that implements the task. */
"Task 3", /* Text name for the task. This is to facilitate debugging only. */
500, /* Stack depth in words. */
NULL, /* We are not using the task parameter. */
3, /* This task will run at priority 2. */
&xHandleTask3 );
/* Create one task. */
xTaskCreate( vTask4, /* Pointer to the function that implements the task. */
"Task 4", /* Text name for the task. This is to facilitate debugging only. */
500, /* Stack depth in words. */
NULL, /* We are not using the task parameter. */
4, /* This task will run at priority 2. */
NULL ); /* We are not using the task handle. */
}
gitee/casy
点赞
回复评论 (2)
沙发
caizhiwei
实验结果:
gitee/casy
点赞
2015-4-22 14:44
板凳
我无聊
printf("\r\n%s",(char*)(pvParameters));
原码在哪?如何改为其他串口?
点赞
2016-5-14 15:18
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
stm32 nucleo l053 怎么用
TI SimpleLink 要直播啦!9月8日开播~预报名观看赢好礼!
PWM输入捕获,选择触发源的问题
有奖活动 | “keysight车载以太网和雷达测试”短视频,观看有礼
网上搜集了一款RENESAS的高速球产品方案!
AM3517开发请教
MIPI CSI所能支持的像素计算方法
串口调试工具
渺茫了,怎样去学洗飞思卡尔HCS08 单片机
一个关于放大器反馈电阻的超难问题
WinCE 开发过程中的一些问题
发贴,试头像。
MSP430FR5969BOOT程序设计和应用程序设计
【MSP430 编译器使用经验】+程序中的volatile
是我过度谨慎了吗?
4.2V升压到50V
嵌入式学习,嵌入式学习有哪些要素呢
请问如何用ISE对modelsim中的verilog文件进行综合和后仿真啊
怎样用Xilinx IP核生成希尔伯特滤波器
小妹求助C编程,感激涕零!
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复