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

做文献综述用什么网站视频建设网站

做文献综述用什么网站,视频建设网站,网站开发验收申请报告,上海装修公司哪家好一点任务优先级和Tick 在FreeRTOS中#xff0c;任务的优先级和Tick是两个关键的概念#xff0c;它们直接影响任务的调度和执行。 任务优先级 每个任务都被分配一个优先级#xff0c;用于决定任务在系统中的调度顺序。 优先级是一个无符号整数#xff0c;通常从0开始#xff0… 任务优先级和Tick 在FreeRTOS中任务的优先级和Tick是两个关键的概念它们直接影响任务的调度和执行。 任务优先级 每个任务都被分配一个优先级用于决定任务在系统中的调度顺序。 优先级是一个无符号整数通常从0开始数值越小优先级越高。最高优先级是0最低是configMAX_PRIORITIES - 1。 优先级的取值范围是0~(configMAX_PRIORITIES – 1)数值越大优先级越高。 FreeRTOS的调度器可以使用2种方法来快速找出优先级最高的、可以运行的任务。使用不同的方法时configMAX_PRIORITIES 的取值有所不同。 1通用方法         使用C函数实现对所有的架构都是同样的代码。对configMAX_PRIORITIES的取值没有限制。但是configMAX_PRIORITIES的取值还是尽量小因为取值越大越浪费内存也浪费时间。configUSE_PORT_OPTIMISED_TASK_SELECTION被定义为0、或者未定义时使用此方法。2架构相关的优化的方法         架构相关的汇编指令可以从一个32位的数里快速地找出为1的最高位。使用这些指令可以快速找出优先级最高的、可以运行的任务。使用这种方法时configMAX_PRIORITIES的取值不能超过32。configUSE_PORT_OPTIMISED_TASK_SELECTION被定义为1时使用此方法。 在FreeRTOS中优先级为0的任务是IDLE任务用于在没有其他任务执行时占用CPU。 任务的创建时通过指定参数设置任务的优先级如下所示 xTaskCreate(vTask1, Task1, configMINIMAL_STACK_SIZE, NULL, 1, Task1_Handle); Tick Tick是FreeRTOS内核用于计时和任务调度的基本时间单元。 FreeRTOS通过硬件定时器或者软件定时器每隔一定时间即Tick间隔产生一次中断。 Tick的间隔由configTICK_RATE_HZ定义它表示每秒钟产生的Tick数。 关系 任务的调度是基于优先级的具有更高优先级的任务将在具有较低优先级的任务之前执行。 Tick间隔决定了系统时钟的精度同时也影响了任务的延时和时间控制。 任务在等待一定时间或进行延时时使用vTaskDelay()等函数参数是以Tick为单位的时间。 vTaskDelay(100 / portTICK_PERIOD_MS); // 暂停任务100ms 任务的优先级和Tick的概念结合在一起形成了FreeRTOS中任务调度和时间控制的基础。通过调整任务的优先级和配置Tick的间隔可以灵活地控制系统中任务的执行顺序和时间行为。 以下是一个基于FreeRTOS的STM32F103芯片的简单优先级实验案例代码。该例子创建了两个任务分别以不同的优先级运行以演示优先级如何影响任务的调度。 #include stm32f1xx.h #include FreeRTOS.h #include task.h// 函数原型 void SystemClock_Config(void); static void MX_GPIO_Init(void);// 任务函数 TaskHandle_t Task1_Handle, Task2_Handle;void vTask1(void *pvParameters) {while (1) {// 任务1的处理逻辑HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 切换LED状态vTaskDelay(1000 / portTICK_PERIOD_MS); // 每隔1秒执行一次} }void vTask2(void *pvParameters) {while (1) {// 任务2的处理逻辑vTaskDelay(2000 / portTICK_PERIOD_MS); // 每隔2秒执行一次} }int main(void) {// 硬件初始化HAL_Init();SystemClock_Config();MX_GPIO_Init();// 创建任务1优先级1xTaskCreate(vTask1, Task1, configMINIMAL_STACK_SIZE, NULL, 1, Task1_Handle);// 创建任务2优先级2xTaskCreate(vTask2, Task2, configMINIMAL_STACK_SIZE, NULL, 2, Task2_Handle);// 启动调度器vTaskStartScheduler();// 代码不应该运行到这里如果运行到这里说明发生了错误while (1) {// 处理错误} }// 系统时钟配置 void SystemClock_Config(void) { }// GPIO初始化 static void MX_GPIO_Init(void) { } 在这个例子中任务1和任务2分别在不同的时间间隔内切换LED的状态。任务1的优先级较高它每隔1秒执行一次而任务2的优先级较低它每隔2秒执行一次。 任务状态 在FreeRTOS中较高优先级的任务将优先于较低优先级的任务执行。任务优先级是通过任务创建时指定的参数来设置的在xTaskCreate函数的第5个参数。在这个案例中任务1的优先级为1任务2的优先级为2。 FreeRTOS中的任务可以处于不同的状态这些状态反映了任务在系统中的执行阶段。任务的状态是通过eTaskState枚举类型表示的定义在task.h头文件中。以下是任务可能的状态 eRunning运行中 任务正在执行。这是任务处于活动状态的时候。 eReady就绪 任务已经准备好执行但由于有其他高优先级任务在运行该任务暂时没有被调度。 eBlocked阻塞 任务由于等待某些事件而被阻塞例如等待定时器、消息队列、信号量等。 eSuspended挂起 任务被显式地挂起不再参与调度。 eDeleted已删除 任务已被删除但其资源尚未被释放。 eInvalid无效 无效状态通常用于表示错误或未知状态。 你可以使用eTaskGetState函数来获取任务的当前状态。以下是一个示例代码 #include FreeRTOS.h #include task.hTaskHandle_t xTaskHandle;void vTaskFunction(void *pvParameters) {while (1) {// 任务的处理逻辑} }int main(void) {// 创建任务xTaskCreate(vTaskFunction, Task, configMINIMAL_STACK_SIZE, NULL, 1, xTaskHandle);// 启动调度器vTaskStartScheduler();// 代码不应该运行到这里如果运行到这里说明发生了错误while (1) {// 处理错误} }void vApplicationIdleHook(void) {// 空闲钩子函数eTaskState taskState eTaskGetState(xTaskHandle);switch (taskState) {case eRunning:// 任务正在运行break;case eReady:// 任务就绪break;case eBlocked:// 任务被阻塞break;case eSuspended:// 任务被挂起break;case eDeleted:// 任务已删除break;case eInvalid:// 无效状态break;} } 在这个例子中vApplicationIdleHook是一个空闲钩子函数用于在系统空闲时检查任务的状态。函数eTaskGetState返回任务的当前状态然后可以根据任务的状态进行相应的处理。 阻塞状态Blocked State 在FreeRTOS中任务的阻塞状态Blocked State表示任务由于等待某些事件而无法执行。任务可以因为多种原因而被阻塞包括等待定时器、等待消息队列、等待信号量等。当任务处于阻塞状态时它将不会被调度执行直到满足了其阻塞条件。 以下是几个常见的阻塞状态的示例 等待定时器 // 创建定时器 TimerHandle_t xTimer xTimerCreate(MyTimer, pdMS_TO_TICKS(1000), pdTRUE, 0, vTimerCallback);// 启动定时器在任务中使用xTimerPendFunctionCallFromISR等函数 xTimerStart(xTimer, 0); 在任务中可能会使用xTimerPendFunctionCallFromISR等函数等待定时器的超时事件。 等待消息队列 // 创建消息队列 QueueHandle_t xQueue xQueueCreate(5, sizeof(int));// 在任务中等待消息队列 xQueueReceive(xQueue, data, portMAX_DELAY); 任务通过xQueueReceive函数等待消息队列中的消息如果队列为空任务将被阻塞直到队列中有数据。 等待信号量 // 创建信号量 SemaphoreHandle_t xSemaphore xSemaphoreCreateBinary();// 在任务中等待信号量 xSemaphoreTake(xSemaphore, portMAX_DELAY); 任务通过xSemaphoreTake函数等待信号量如果信号量被其他任务取得当前任务将被阻塞直到信号量可用。 在上述示例中portMAX_DELAY表示任务将一直等待直到满足其阻塞条件为止。任务也可以使用超时值来设置阻塞的最大等待时间。一旦阻塞条件得到满足任务将被置为就绪状态等待调度器调度执行。 暂停状态Suspended State 在FreeRTOS中任务的暂停状态Suspended State表示任务被显式地挂起使得该任务不再参与调度即不会被执行。任务在创建后可以通过调用vTaskSuspend()函数将其挂起然后通过调用vTaskResume()函数将其恢复执行。 以下是一个简单的示例代码演示了任务的暂停和恢复 #include FreeRTOS.h #include task.hTaskHandle_t xTaskHandle;void vTaskFunction(void *pvParameters) {while (1) {// 任务的处理逻辑} }int main(void) {// 创建任务xTaskCreate(vTaskFunction, Task, configMINIMAL_STACK_SIZE, NULL, 1, xTaskHandle);// 启动调度器vTaskStartScheduler();// 代码不应该运行到这里如果运行到这里说明发生了错误while (1) {// 处理错误} }// 在某个事件或条件下挂起任务 void vSuspendTask(void) {vTaskSuspend(xTaskHandle); }// 在某个事件或条件下恢复任务 void vResumeTask(void) {vTaskResume(xTaskHandle); } 在这个例子中vTaskSuspend()函数用于挂起任务vTaskResume()函数用于恢复任务。通常这样的操作可以用于在某些条件满足或事件发生时挂起任务然后在其他条件下恢复任务的执行。 需要注意的是挂起任务不会立即停止任务的执行而是在任务下一次被调度执行时生效。此外挂起任务并不会释放任务所占用的资源因此在使用这些函数时需要谨慎以免引起资源泄漏。 就绪状态(Ready) 在FreeRTOS中任务的就绪状态Ready State表示任务已经准备好被调度执行但由于有其他高优先级的任务正在运行该任务暂时还未被调度。 在FreeRTOS中任务被创建后它的状态一开始就是就绪状态等待调度器来选择合适的时机执行它。任务的就绪状态可以由以下几种情况触发 任务创建 任务被创建后会进入就绪状态等待调度执行。 xTaskCreate(vTaskFunction, Task, configMINIMAL_STACK_SIZE, NULL, 1, xTaskHandle); 任务挂起状态解除 任务从挂起状态Suspended State被恢复后会进入就绪状态。 vTaskResume(xTaskHandle); 等待事件结束 任务等待某个事件的发生一旦事件发生任务从阻塞状态切换到就绪状态。 xSemaphoreTake(xSemaphore, portMAX_DELAY); 任务等待定时器超时 任务等待一个定时器超时一旦超时任务从阻塞状态切换到就绪状态。 xTaskDelay(1000 / portTICK_PERIOD_MS); 在以上例子中xTaskCreate创建了一个任务vTaskResume恢复了一个挂起的任务xSemaphoreTake和xTaskDelay是任务等待事件或超时的示例。 任务的就绪状态是由FreeRTOS调度器根据任务的优先级和调度算法来决定的。当调度器判定某个任务处于就绪状态时该任务将会被调度器选中并执行相应的任务函数。 任务状态转换图
http://www.zqtcl.cn/news/946343/

相关文章:

  • 做字幕网站重庆seo代理价格
  • 长春公司做网站找哪个公司好英文网站google推广
  • 潍坊网站建设方案推广官方网站如何建设
  • 设计网站的公司名称苏州建设人才网官网
  • 河南网站推广优化公司wordpress搭建vip下载站
  • 做网站拉客户有效吗网络宣传渠道
  • 制作深圳网站建设四川广安网站建设
  • 网站服务器服务商wordpress特效主题
  • 大型大型网站制作wordpress产品相册
  • 古董做推广哪个网站好租空间开网站
  • 巴中网站建设开发公司网站上传在空间哪里
  • 哈尔滨网站建设赚钱么宁波大型网站制作
  • 自助网站搭建群晖搭建的wordpress外网访问
  • 社区网站建设申请报告WordPress评论通知邮箱
  • 佛山网站建设技术托管建设网站容易吗
  • 网站开发的层级结构iis6.0如何做网站301
  • 做旅游那些网站好个人博客怎么做
  • 中国最好网站建设公司网站前台做好之后再怎么做
  • 焦作整站优化app开发报价单及方案
  • 网站开发合同验收怎样建立网站 优帮云
  • 池州哪家做网站wordpress方小程序主题
  • 免费建设网站入驻七牛云存储wordpress
  • 上海专业的网站吕梁做网站公司
  • 网站视频链接国际物流网站模板
  • 用asp.net和access做的关于校园二手网站的论文网站环境搭建好后怎么做网站
  • 如何查网站的外链哈尔滨微信网站开发
  • 洛阳设计网站公司建设银行网站 购买外汇
  • 做视频网站的备案要求吗给工厂做代加工
  • 网站建设技术外包西安推荐企业网站制作平台
  • 建立一个做笔记的网站石家庄网站优化