请选择 进入手机版 | 继续访问电脑版
快捷导航
0 85

STM32F103ZET6 FreeRTOS 任务切换

anymsg_renzong 于 2017-12-12 21:15 发表在 [技术分享] [复制链接]
第一个任务 启动

  1. int main(void)
  2. {
  3.         LED_CONFIG();

  4.         //taskENTER_CRITICAL();
  5.         //taskYIELD();

  6.         xTaskCreate(OnTask,(signed portCHAR *)"LED_ON",configMINIMAL_STACK_SIZE,NULL,configMAX_PRIORITIES-2,NULL);

  7.         xTaskCreate(OffTask,(signed portCHAR *)"LED_OFF",configMINIMAL_STACK_SIZE,NULL,configMAX_PRIORITIES-2,NULL);

  8.         vTaskStartScheduler();
  9.        
  10.         while(1){;}
  11. }
复制代码
xTaskCreate










在系统调度过程中,主要涉及到的三个异常:
# SVC 系统服务调用
操作系统通常不让用户程序直接访问硬件,而是通过提供一些系统服务函数。 这里主要触发后,在异常服务中启动第一个任务
# PendSV 可悬起系统调用
相比 SVC, PenndSV 异常后可能不会马上响应, 等到其他高优先级中断处理后才响应。 用于上下文切换,同时保证其他中断可以被及时响应处理。
# SysTick 节拍定时器
在没有高优先级任务强制下,同优先级任务按时间片轮流执行,每次SysTick中断,下一个任务将获得一个时间片。

系统调用了 xPortStartScheduler设置节拍定时器和启动第一个任务,开始系统正常运行调度

VTastStartScheduler的实现


VTastStartScheduler - > xPortStartScheduler()  -> vPortStartFirstTask


利用宏实现任务切换  portYIELD_WITHIN_API();

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.

共 0 个关于本帖的回复 最后回复于 2017-12-12 21:15

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

推荐板块

精彩推荐

热门排行

明星用户

手机版|小黑屋|AnyMSG ( ©AnyMSG 2009 - 2017 · ICP备16009991号 )

GMT+8, 2019-4-25 21:44