当前位置: 首页 > wzjs >正文

对外网站建设情况汇报网页设计师 培训

对外网站建设情况汇报,网页设计师 培训,物流的网站模板,wordpress怎么去掉谷歌字体目录 一、函数vTaskList() 1、 函数说明 2、返回的字符串表格说明 3、函数的使用方法 二、 vTaskList()的应用示例 1、示例功能、项目设置 2、软件设计 (1)main.c (2)freertos.c (3)FreeRTOSConf…

目录

一、函数vTaskList()

1、 函数说明

2、返回的字符串表格说明

3、函数的使用方法

二、 vTaskList()的应用示例

1、示例功能、项目设置

2、软件设计

(1)main.c

(2)freertos.c

(3)FreeRTOSConfig.h

三、运行与调试


一、函数vTaskList()

1、 函数说明

        函数vTaskList()是内核信息统计用途的API函数,用于返回内核中所有任务的字符串列表信息,包括每个任务的名称、状态、优先级、高水位值、任务编号等。其原型定义如下:

#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )void vTaskList( char * pcWriteBuffer ){TaskStatus_t *pxTaskStatusArray;UBaseType_t uxArraySize, x;char cStatus;//此处省去1万言}#endif /* ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */

        参数pcWriteBuffer是预先创建的一个字符数组的指针,用于存储返回的字符串信息。这个字符数组必须足够大,FreeRTOS不会检查这个数组的大小。这个函数的使用示例代码如下:

char infoBuffer[300];
vTaskList(infoBuffer);

        返回的数据存储在字符数组infoBuffer中,使用了“\t”“\n”等转义字符,以便用表格方式显示。

2、返回的字符串表格说明

        函数vTaskList()返回的是一个用字符串表达的表格。例如:

Task_LED1		\tx\t8\t50\t2\r\n
Tmr Svc		    \tR\t2\t246\t4\r\n
IDLE			\tR\t0\t118\t3\r\n
Task_ADC		\tB\t24\t134\t1\r\n\0

        其中,每行字符串的第1列是任务名称,这里除了用户的两个任务Task_LED1和Task_ADC,还有系统自动创建的空闲任务IDLE和定时器服务任务Tmr Svc。

        其中,每行字符串的第2列是用“\t”分隔的多个参数,依次为状态、优先级、栈空间高水位值和任务编号。

        其中的第2列,任务状态用字母表示,各字母的意义如下:

  • X,运行状态,也就是调用函数vTaskList()的任务的状态。
  • B,阻塞状态。
  • R,就绪状态。
  • S,挂起状态,或无限等待时间的阻塞状态。
  • D,被删除的任务,但是空闲任务还没有释放其使用的内存。

        例如,对于上图中的任务Task_LED1,其状态字符串是“\tX\t8\t50\t2\r\n”,表示它处于运行状态,优先级为8,栈空间高水位值为50,任务编号为2。

3、函数的使用方法

        vTaskList()的代码实现用到了函数sprintf(),会使编译后的应用的大小明显增大。所以,函数一般只在调试时使用,不要在发布版本里使用。要使用这个函数,需要将以下3个参数都设置为1。如果不这样操作,编译器会警告。

  • configUSE_TRACE_FACILITY,默认值为1,可在CubeMX里设置。
  • configUSE_STATS_FORMATTING_FUNCTION,默认值为0,可在CubeMX里设置。
  • configSUPPORT_DYNAMIC_ALLOCATION,默认值为1,不能在CubeMX里设置。

        修改FreeRTOSConfig.h,定义宏,覆盖FreeRTOS.h相关的宏定义:

//vTaskList()
#define configUSE_TRACE_FACILITY	1
#define configUSE_STATS_FORMATTING_FUNCTIONS	1
#define configSUPPORT_DYNAMIC_ALLOCATION	1

二、 vTaskList()的应用示例

        使用本文作者写的其他文章作为本文示例的参考文章,项目背景、项目配置完全相同。特别地,创建的FreeRTOS任务完全相同。项目的软件设计大部分相同。

        参考文章:细说STM32单片机FreeRTOS任务管理API函数及多任务编程的实现方法-CSDN博客  https://wenchm.blog.csdn.net/article/details/147249948?spm=1011.2415.3001.5331

1、示例功能、项目设置

        与参考文章相同。

2、软件设计

(1)main.c

         与参考文章相同。

(2)freertos.c

         下面的任务函数代码,CubeMX自动生成函数框架,手动重写函数体:

/* USER CODE BEGIN Header_AppTask_info */
/**
* @brief Function implementing the Task_info thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_AppTask_info */
void AppTask_info(void *argument)
{/* USER CODE BEGIN AppTask_info *////*----------获取单个任务信息----------*///TaskHandle_t taskHandle=xTaskGetCurrentTaskHandle();				///<获取当前任务句柄TaskHandle_t taskHandle=xTaskGetIdleTaskHandle();					///<获取空闲任务句柄//TaskHandle_t taskHandle=xTaskGetHandle("Task_ADC");				///<通过任务名称获取句柄//TaskHandle_t taskHandle=Task_ADCHandle;							///<直接使用句柄变量TaskStatus_t taskInfo;												///<任务信息BaseType_t getFreeStackSpace=pdTRUE;								///<是否获取高水位值eTaskState taskState=eInvalid;										///<当前任务状态vTaskGetInfo(taskHandle, &taskInfo, getFreeStackSpace, taskState);	///<获取任务信息taskENTER_CRITICAL();												///<开始临界代码段,禁止任务调度printf("Task_Info: Show task info and get it by vTaskGetInfo(). \r\n");printf("Task Name       = %s\r\n",taskInfo.pcTaskName);printf("Task Number     = %ld\r\n",taskInfo.xTaskNumber);printf("Task State      = %d\r\n",taskInfo.eCurrentState);printf("Task Priority   = %ld\r\n",taskInfo.uxCurrentPriority);printf("High Water Mark	= %d\r\n\r\n",taskInfo.usStackHighWaterMark);///*----------获取每个任务的高水位值----------*/printf("Task_Info: Get High Water Mark of tasks. \r\n");taskHandle=xTaskGetIdleTaskHandle();UBaseType_t  hwm=uxTaskGetStackHighWaterMark(taskHandle);printf("Idle Task	= %ld\r\n",hwm);taskHandle=Task_ADCHandle;hwm=uxTaskGetStackHighWaterMark(taskHandle);printf("Task_ADC 	= %ld\r\n",hwm);taskHandle=Task_infoHandle;hwm=uxTaskGetStackHighWaterMark(taskHandle);printf("Task_Info 	= %ld\r\n\r\n",hwm);///*----------获取内核信息----------*/printf("Task_Info: Get Kernel Info. \r\n");UBaseType_t  taskNum=uxTaskGetNumberOfTasks();		            ///<获取任务数量printf("uxTaskGetNumberOfTasks() = %ld\r\n\r\n",taskNum);char infoBuffer[300];vTaskList(infoBuffer);											///<返回字符串表格,用/t/n制表printf("vTaskList: \r\n");printf("TaskName     Status Priority HighLevel Index\r\n");printf("%s\r\n",infoBuffer);taskEXIT_CRITICAL();											///<结束临界代码段,允许任务调度UBaseType_t loopCount=0;/* Infinite loop */for(;;){loopCount++;HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_6);					   ///<PA6=LED1 flashingvTaskDelay(pdMS_TO_TICKS(3000));if (loopCount==10)										   ///<循环10次后退出break;printf("Task_Info is deleted,and then only Task_ADC is running. \r\n\r\n");vTaskDelete(NULL);										   ///<删除任务自身}/* USER CODE END AppTask_info */
}

        其它部分的代码与参考项目完全相同。

(3)FreeRTOSConfig.h

         必须手动修改宏定义:

​
/* USER CODE BEGIN Defines */
/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
//xTaskGetIdleTaskHandle()
#define INCLUDE_xTaskGetIdleTaskHandle 1//vTaskList()
#define configUSE_TRACE_FACILITY	1
#define configUSE_STATS_FORMATTING_FUNCTIONS	1
#define configSUPPORT_DYNAMIC_ALLOCATION	1/* USER CODE END Defines */​

三、运行与调试

        构建项目后,将其下载到开发板上并运行,可以在串口助手上看到各种信息。任务Task_ADC周期性地通过ADC3采集电压值,并在串口助手上显示;任务Task_Info读取的信息在串口助手上显示,LED1闪烁几次后,任务Task_Info被删除,LED1不再闪烁,修改延迟时间会小小改变删除任务的效果。这个结果与参考文章的结果相同。

        不同于参考文章,本示例的运行结果还包含主要考察的函数vTaskList()的应用效果:


文章转载自:

http://68DB9s9n.cfqbL.cn
http://f4S6U9O0.cfqbL.cn
http://zXpOqGVh.cfqbL.cn
http://wsuvlux6.cfqbL.cn
http://ATA022oZ.cfqbL.cn
http://68WzIHTE.cfqbL.cn
http://FBCfXad3.cfqbL.cn
http://LU0ZePF2.cfqbL.cn
http://kcFrIgvf.cfqbL.cn
http://g5SRstz0.cfqbL.cn
http://iMPfgfZo.cfqbL.cn
http://zTnc2fS0.cfqbL.cn
http://83PsMjaA.cfqbL.cn
http://N6m0qC9C.cfqbL.cn
http://7rCjDPVP.cfqbL.cn
http://2IuErgf6.cfqbL.cn
http://9cZIvxk8.cfqbL.cn
http://YDZlqjib.cfqbL.cn
http://V1OTf2DE.cfqbL.cn
http://6xZoupYa.cfqbL.cn
http://yPsNg6eg.cfqbL.cn
http://Oh3nH38p.cfqbL.cn
http://PZfSsnmA.cfqbL.cn
http://ELbl0365.cfqbL.cn
http://ZQoqskCl.cfqbL.cn
http://ctcu5V7W.cfqbL.cn
http://TC9W0o8d.cfqbL.cn
http://AvPxf0rE.cfqbL.cn
http://Z94MjqIy.cfqbL.cn
http://4VnHpqzd.cfqbL.cn
http://www.dtcms.com/wzjs/633289.html

相关文章:

  • 高品质网站建设公司医院网站建设选哪家
  • 石家庄站到正定机场jsp网站怎么做邮箱验证码
  • 园区 网站建设策划方案怎么免费做网站推广
  • 百拓公司做网站怎么样优秀品牌设计公司
  • 构建一个网站需要什么seo教程搜索引擎优化入门与进阶
  • 清河做网站哪家好谷歌排名优化
  • 廊坊手机模板建站中国网站建设公司排行榜
  • 上海网站定制设计淘宝做网站退款
  • 租用海外服务器的网站有域名吗网站首页文案模板
  • 有哪些网站是做背景图片素材的绵阳网站改版
  • 域名手机网站源码外贸英文网站建设价格
  • 贵阳网站建设制作价格站长工具seo综合查询权重
  • 专业网站设计如何提升网页品质个人承接网站开发
  • 内网网站搭建设网站后台免费模板下载
  • 做网页引用别的网站的视频网站搜索引擎提交入口
  • 美工好的网站网站推广招商
  • 做国外服务器网站网站建设开拓该行业的难点疑
  • 影响网站打开速度的因素联合年检怎么做网站上
  • 淘宝客领券网站怎么做树莓派用来做网站
  • 商城网站建设定制网站建设网站是否有管理员权限
  • 如何做优惠券网站wordpress弹出登陆
  • 网站怎样优化关键词好网页设计模板html代码素材
  • 阿里巴巴网站优化怎么做wordpress实现论坛功能
  • 建网站新科网站建设wordpress轻社区模板
  • 福建省建设职业注册资格管理中心网站网页制作教程软件
  • 做网站建设要学多久东莞市镇街建设项目监理招标网站
  • 织梦的网站关键词站长工具综合查询2020
  • wordpress只显示首页网站seo的关键词排名怎么做的
  • 网站设计分析报告做手机网站和pc如何做
  • 网站跳出率 查询湖人排名最新