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

在线做qq空间的网站吗体球网足球世界杯

在线做qq空间的网站吗,体球网足球世界杯,asp做网站的步骤,python网站开发架构一、前言 在实际使用FreeRTOS 的时候我们时常需要根据自己需求来配置FreeRTOS#xff0c;而且不同架构 的MCU在使用的时候配置也不同。FreeRTOS的系统配置文件为FreeRTOSConfig.h#xff0c;在此配置文件中可以完成FreeRTOS的裁剪和配置#xff0c;这是非常重要的一个文件而且不同架构 的MCU在使用的时候配置也不同。FreeRTOS的系统配置文件为FreeRTOSConfig.h在此配置文件中可以完成FreeRTOS的裁剪和配置这是非常重要的一个文件本章就来讲解这个文件本章分为如下几部分: 1、FreeRTOSConfig.h文件 2、“INCLUDE_”开始的宏 3、“config”开始的宏 二、 FreeRTOSConfig.h文件 刚开始我们在移植FreeRTOS的时候就注意到移植完成后会出现一个报错 报错的原因就是“缺少FreeRTOSConfig.h文件”可见该文件的重要性所以我在这里和大家分享一下我对该文件认识。 通过查阅资料我了解到FreeRTOSConfig.h文件是十分重要的。 FreeRTOS的配置基本是通过在FreeRTOSConfig.h 中使用“#define”这样的语句来定义宏定义实现的 在FreeRTOS的官方demo中每个工程都有一个FreeRTOSConfig.h文件我们在使用的时候可以参考这个文件甚至直接复制粘贴使用。 三、“INCLUDE_”开始的宏 “INCLUDE_”开头的宏有什么用呢 答使能和除能FreeRTOS中相应的 API 函数即用来配置FreeRTOS中可选API函数的 举个例子来说明一下吧 比如当宏INCLUDE_vTaskPrioritySet 设置为0的时候表示不能使用函数VTaskPrioritySet()当设置为的时候就表示可以使用函数VTaskPrioritySet() 以上描述的功能就是条件编译。 从截图中可以看出只有当满足条件 INCLUDE_vTaskPrioritySet 1时函数vTaskPrioritySet才可以被编译。FreeRTOS中的裁剪和配置就是用这种条件编译的方法来实现的不止FreeRTOS这么干其实很多的协议栈、RTOS系统和GUI库等都是使用条件编译的方法来完成配置和裁剪的。条件编译的好处就是节省空间不需要的功能就不用编译这样就可以根据实际需求来减少系统占用的ROM和RAM大小根据自己所使用的MCU来调整系统消耗降低成本。 接下来一起看一些“INCLUDE_”开始的宏分析一下他们的作用。 还有很多这里就不再逐个列举了。 四、”config“开始的宏 “config”开始的宏和“INCLUDE_”开始的宏一样都是用来完成FreeRTOS的配置和裁剪的接下来我们就看一下这些“config”开始的宏。 1、configAPPLICATION_ALLCATED_HEAP 默认情况下FreeRTOS的堆内存是由编译器来分配的将宏configAPPLICATION_ALLOCATED_HEAP定义为1的话堆内存可以由用户自行设置堆内存在 heap_1.c、heap_2.c、heap_3.c、heap_4.c和 heap_5.c中有定义具体在哪个文件取决于用户的选择哪种内存管理方式。比如选择heap_4.c那么在heap_4.c中就有如图所示定义: 从图中可以看出只有当宏configAPPLICATION_ALLOCATED_HEAP 时需要用户自行堆内存ucHeap否则的话就是编译器来分配。 2、configASSERT 断言类似C标准库中的 assert()函数调试代码的时候可以检查传入的参数是否合理FreeRTOS内核中的关键点都会调用configASSERT(x)当x为0的时候说明有错误发生使用断言的话会导致开销加大一般在调试阶段使用。configASSERT()需要在FreeRTOSConfig.h文件中定义。 注意vAssertCalled()函数需要用户自行去定义可以是显示到LCD上的函数也可以是通过串口打印出来的函数如下的定义: 当参数x错误的时候就通过串口打印出发生错误的文件名和错误所在的行号调试代码的可以使用断言当调试完成以后尽量去掉断言防止增加开销! 3、configCHECK_FOR STACK_ OVERFLOW 设置堆栈溢出检测每个任务都有一个任务堆栈如果使用函数xTaskCreate()创建一个任 务的话那么这个任务的堆栈是自动从FreeRTOS 的堆(uCHeap)中分配的堆栈的大小是由函数xTaskCreate()的参数usStackDepth来决定的。如果使用函数xTaskCreateStatic()创建任务的话任务堆栈是由用户设置的参数pxStackBuffer为任务堆栈一般是一个数组。 堆栈溢出是导致应用程序不稳定的主要因素FreeRTOS 提供了两种可选的机制来帮助检测和调试堆栈溢出不管使用哪种机制都要设置宏 configCHECK_FOR_STACK_OVERFLOW.如果使能了堆栈检测功能的话即宏configCHECK_FOR_STACK_OVERFLOW不为0那么用户必须提供一个钩子函数(回调函数)当内核检测到堆栈溢出以后就会调用这个钩子函数此钩子函数原型如下: 参数xTask是任务句柄pcTaskName是任务名字要注意的是堆栈溢出太严重的话可能会损毁这两个参数如果发生这种情况的话可以直接查看变量 pxCurrentTCB来确定哪个任务发生了堆栈溢出。有些处理器可能在堆栈溢出的时候生成一个fault中断来提示这种错误另外堆栈溢出检测会增加上下文切换的开销建议在调试的时候使用。 configCHECK_FOR_STACK_OVERFLOW 1使用堆栈一处检测方法1。 上下文切换的时候需要保存现场现场是保存在堆栈中的这个时候任务堆栈使用率很可能达到最大值方法一就是不断的检测任务堆栈指针是否指向有效空间如果指向了无效空间的话就会调用钩子函数。方法一的优点就是快。但是缺点就是不能检测所有的堆栈溢出。 configCHECK_FOR_STACK_OVERFLOW 2,使用堆栈溢出检测方法2. 使用方法二的话在创建任务的时候会向任务堆栈填充一个已知的标志值方法二还会一直检测堆栈后面的几个bytes标记值是否被改写如果被改写的话就会调用堆栈溢出钩子函数所以方法二也会使用方法一中的机制 方法二比方法一相对要慢一些但是对于用户而言还是比较快的。方法二可以检测到几乎所有的堆栈溢出但是也会存在某些情况检测不到的堆栈溢出。比如溢出值和标记值同时的时候。 4、configCPU_CLOCK_HZ 设置CPU的频率 5、configSUPPORT_ DYNAMIC_ALLOCATION 定义为1的话在创建FreeRTOS的内核对象的时候所需要的RAM就会从FreeRTOS的堆中动态的获取内存如果定义为0的话所需的 RAM就需要用户自行提供默认情况下宏configSUPPORT_ DYNAMIC_ALLOCATION为1。 6、configENABLE_BACKEARD_COMPATIBILITY FreeRTOS.h中由一些列的#define宏定义 在V8.0.0之前的FreeRTOS中会使用到这些数据类型这些宏保证了你的代码从V8.0.0之前的版本升级到最新版本的时候不需要做出修改默认情况下宏configENABLE_BACKWARD_COMPATIBILITY为1。 7、configGENERATE_RUN_TIME_STATS 设置为1开启时间统计功能相应的API函数会被编译为0时关闭时间统计功能。如果宏configGENERATE_RUN_TIME_STATS为1的话还需要定义下表中的宏。 8、configIDLE_SHOULD_YIELD 此宏定义了与空闲任务idle Task处于同等优先级的其他用户任务的行为当为0的时候空闲任务不会为其他处于优先级的任务让出CPU使用权。当为1的时候空闲任务就会为处于同等优先级的用户让出CPU使用权除非没有就绪的用户任务这样花费在空闲任务上的时间就会很少但是这种方法也带了副作用如图 图中有三个任务A、B、C还有一个空闲任务I用户任务和空闲任务处于一优先级任务切换发生在T0 ~T7时刻。T0 ~ T7之间的时间为一个时间片在T2时刻空闲任务I开始执行I任务运行了一段时间后被A任务抢走了CPU使用权A任务运行到T3时刻发生任务切换B任务开始进行。可以看出其任务I和任务A一起使用了一个时间片所以任务A运行的时间比其他任务少 一般建议关闭这个功能毕竟空闲任务用不了多少时间并且现在的MCU性能都很强。 9、configKERNEL_INTERRUPT_PRIORITY、 configMAX_SYSCALL_INTERRUPT_PRIORITY、configMAX_API_CALL_INTERRUPT_PRIORITY 这三个宏和RTOS的中断配置有关。 10、 configMAX_CO_ROUTINE_PRIORITIES 设置可以分配给协程的最大优先级也就是协程的优先级数。设置号以后协程的优先级可以从0到configMAX_CO_ROUTINE_PRIORITIES-1其中О是最低的优先级configMAX_CO_ROUTINE_PRIORITIES-1为最高的优先级。 11、configMAX_PRIORITIES  设置任务的优先级数量设置好以后任务就可以使用从0到configMAX_PRIORITIES-1的优先级其中0是最低优先级configMAX_PRIORITIES-1是最高优先级。 注意和UCOS的区别UCOS中0是最高优先级! 12、configMAX_TASK_NAME_LEN 设置任务名最大长度 13、 configMINIMAL_STACK_SIZE 设置空闲任务的最小任务堆栈大小以字为单位不是字节。比如在STM32上设置为100的话那么真正的堆栈大小就是100*4 400 字节 14、configNUM_THREAD_LOCAL_STORAGE_POINTERS 设置每个任务的本地存储指针数组大小任务控制块中有本地存储数组指针用户应用程序可以在这些本地存储中存入一些数据。 15、configQUEUE_REGISTRY_SIZE 设置可以注册的队列和信号量的最大数量在使用内核调试器查看信号量和队列的时候需要设置此宏而且要先将消息队列和信号量进行注册只有注册了的队列和信号量才会再内核调试器中看到如果不使用内核调试器的话此宏设置为0即可。 16、configSUPPORT_STATIC_ALLOCATION 当此宏定义为1在创建一些内核对象的时候需要用户指定RAM当为0的时候就会自使用heap.c 中的动态内存管理函数来自动的申请RAM。 17、config TICK_RATE_ HZ 设置FreeRTOS的系统时钟节拍频率单位为HZ此频率就是滴答定时器的中断频率需要使用此宏来配置滴答定时器的中断前面在讲delay.c文件的时候已经说过了。为了兼容ST最新的HAL库我们将此宏设置为1000周期就是1ms。 18、configTIMER_QUEUE_LENGTH 此宏是配置FreeRTOS 软件定时器的FreeRTOS的软件定时器API函数会通过命令队列向软件定时器任务发送消息此宏用来设置这个软件定时器的命令队列长度。 19、 figTIMER_TASK_PRIORITY 设置软件定时器任务的任务优先级。 20、config TIMER_TASK_STACK_DEPTH 设置定时器服务任务的任务堆栈大小。 21、configTOTAL_HEAP_SIZE 设置系统节拍计数器变量数据类型系统节拍计数器变量类型为TickType_t当configUSE_16_BIT_TICKS为1的时候 TickType_t就是16位的当configUSE_16_BIT_TICKS为0的话TickType_t就是32位的。 22、configUSE_16_BIT_TICKS 设置堆栈大小如果使用了动态内存管理的话FreeRTOS在创建任务、信号量、队列等的时候就会使用heap_x.c(x 为1 ~ 15)中的内存申请内存。这些内存就是从堆ucHeap[configTOTAL_HEAP_SIZE]中申请的堆的大小由 configTOTAL_HEAP_SIZE来定义。 23、configUSE_APPLICATION_TASK_TAG 此宏设置为1的话函数configUSE_APPLICATION_TASK_TAGF(和xTaskCallApplicationTaskHook()就会被编译。 24、 configUSE_CO_ROUTINES 此宏为Ⅰ的时候启用协程协程可以节省开销但是功能有限现在的MCU性能已经非常强大了建议关闭协程。  25、configUSE_DAEMON_TASK_STARTUP_HOOK 当宏configUSE_TIMERS和 configUSE_DAEMON_TASK_STARTUP_HOOK都为1的时需要定义函数vApplicationDaemonTaskStartupHook()函数原型如下: 26、configUSE_COUNTING_SEMAPHORES 设置为1的时候启用计数型信号量相关的API函数会被编译。 27、configUSE_ IDLE_ HOOK 为1时使用空闲任务钩子函数用户需要实现空闲任务钩子函数函数的原型如下: 28、configUSE_MALLOC_FAILED_HOOK 为1时使用内存分配失败钩子函数,用户需要实现内存分配失败钩子函数,函数原型如下 29、configUSE_MUTEXES 为1时使用互斥信号量相关的API函数会被编译。 30、configUSE_PORT_OPTIMISED_TASK_SELECTION FreeRTOS有两种方法来选择下一个要运行的任务一个是通用的方法另外一个是特殊的方法也就是硬件方法使用MCU自带的硬件指令来实现。 STM32有计算前导零的指令所以我们可以使用特殊方法即将宏configUSE_PORT_OPTIMISED_TASK_SELECTION定义为1。计算前导零的指令在UCOSII也用到了也是用来查找下一个要运行的任务的。 31、configUSE_PREEMPTION 为1时使用抢占式调度器为0时使用协程。如果使用抢占式调度器的话内核会在每个时钟节拍中断中进行任务切换当使用协程的话会在如下地方进行任务切换: 1、一个任务调用了函数taskYIELD()。 2、一个任务调用了可以使任务进入阻塞态的API函数 3、应用程序明确定义了在中断中执行上下文切换。 32、configUSE_QUEUE_SETS 为1时启用队列集功能。 33、configUSE_RECURSIVE_MUTEXES 为1时使用递归互斥信号量相关的API函数会被编译 34、configUSE_STATS_FORMATTING_FUNCTIONS 宏configUSE_TRACE_FACILITY 和configUSE_ST,ATS_ FORMATTING_FUNCTIONS都为1 的时候函数vTaskList()和 vTaskGetRunTimeStats()会被编译。 35、configUSE_TASK_NOTIFICATIONS 为1的时候使用任务通知功能相关的API函数会被编译开启了此功能的话每个任务会多消耗8个字节。 36、configUSE_TICK_HOOK 为1时使能时间片钩子函数用户需要实现时间片钩子函数函数的原型如下:   37、 configUSE_TICKLESS_IDLE 为1时使能低功耗tickless模式。 38、 configUSE_TIMERS 为1时使用软件定时器相关的API函数会被编译当宏configUSE_TIMERS为1的话那么宏configTIMER_TASK_PRIORITYconfigTIMER_QUEUE_LENGTH和configTIMER_ TASK_STACK_DEPTH必须定义。 39、 configUSE_TIME_SLICING 默认情况下FreeRTOS使用抢占式调度器这意味着调度器永远都在执行已经就绪了的最高优先级任务,优先级相同的任务在时钟节拍中断中进行切换,当宏configUSE_TIME_SLICING为0的时候不会在时钟节拍中断中执行相同优先级任务的任务切换默认情况下宏configUSE_TIME_SLICING为1。 40、 configUSE_TRACE_FACILITY 为1启用可视化跟踪调试会增加一些结构体成员和API函数。 五、结语 以上就是我对FreeRTOS配置文件的介绍还有一些其他的配置宏由于使用的比较少这里并没有列出来。希望我的分享对你学习FreeRTOS有所帮助 学习交流共赴前程https://qm.qq.com/q/5UahSWIili
http://www.pierceye.com/news/11010/

相关文章:

  • 封开网站建设公司做一个中英文网站的价格
  • 前端学校网站开发视频教程wordpress列表缩略图
  • 给个做的网站湖南网站建设网络公司
  • 广西智能网站建设平台网上做兼职网站
  • 做家常菜的网站福州做网站设计公司
  • 企业网站服务费怎么做记账凭证深圳市建设局网站
  • 东莞网站建设关键词网站后台模块
  • 辽宁网站建设多少钱视频网站 阿里云
  • 大型网站建设方案常见问题适合工作室做的项目
  • 腾讯云网站建设的步骤过程宁波seo基础优化平台
  • 公司网站开发类属什么费用食品包装设计ppt
  • 是想建个网站 用本地做服务器微信小程序开发详解
  • 自住房车各项建设部网站项目管理软件模块
  • 上海做网站找哪家好二级学院网站建设方案
  • 网站怎么看好与不好重庆网站建设帝玖科技
  • 云主机怎么装网站在线图片编辑免费
  • 网站建设毕业设计论文做网站流程视频
  • 北京网站建设大概多少钱深圳龙华医院
  • 传奇在线玩网页版亚马逊排名seo
  • 瑜伽 网站模板云南发布紧急通知
  • 市场调查 网站建设建设部电教中心网站
  • 给我一个网站吧网站优化 seo和sem
  • 网站建设方面的书籍建设公司网站需要多少天
  • 什么网站发布任务有人做宣传册模板
  • 打开网站弹出qq对话框sirna在线设计网站
  • 哈尔滨专业做网站海口的网站建设公司
  • ar做网站中山网站建设文化策划书
  • 如何提升网站pr值网站seo月报
  • 湛江网站建设方案策划高要区住房和城乡建设局网站
  • 设计国外网站付费阅读下载网站开发