0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

stm32任务调度的简单说明

独爱72H 来源:CSDN、简书 作者:CSDN、简书 2021-07-23 10:20 次阅读

STM32开发的初始阶段,由于没有操作系统的支持,因而不能方便的对多任务进行调度和管理。而有的任务不紧急,不需要过多的时间去循环执行,因此需要一个简单的任务调度来解决这个问题。STM32F103ZE的AHB时钟为72MHz,通过HSE的8M倍频到72M,然后APB1预分频系数为2,所以TIM2-7时钟为2*36M。由于定时器是16位,PSC寄存器最大为65536,不支持71999,所以只能以0.1ms计数。

整个系统在获取时间的累增时,定义64位变量,即可运行很久的时间,不用担心溢出或者死机。定义64位变量有2个方法,一就是用long long 直接定义,通过sizeof测试为8个字节;二就是利用”stdint.h”,typedef uint64_t u64。一般情况下,定时器计时结果算法公式为:Tout = (ARR+1)(PSC+1)/Tclk。Tclk即为时钟频率。

STM32的任务调度可以有两种方式:1.通过systick_handler定时器调度;2.执行一个系统调用。

cortexM3的寄存器只有16个,cortexM4除了这16个还有很多浮点运算和MPU单元,如果不用这些单元它和M4没有区别,我是用的cortexM4内核的STM32F407,因为没有用浮点运算和MPU保护单元因此OS也和M3内核兼容。因此在任务调度的过程中,也是不断的保存现在任务的这16个寄存器,弹出下一个任务的16个寄存器。

任务调度的步骤总结为如下:

1.保存程序的上下文即当前任务的寄存器,保存存储寄存器的任务堆栈的地址。

2.根据下一个任务的任务堆栈地址依次弹出下一个任务的16个寄存器。

本文整合自 CSDN、简书

责任编辑:fqj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10900

    浏览量

    356094
  • 任务调度
    +关注

    关注

    0

    文章

    27

    浏览量

    9882
收藏 人收藏

    评论

    相关推荐

    基于Flexus X加速MySQL镜像搭建XXL-JOB任务调度平台

    随着云计算威廉希尔官方网站 的飞速发展,Flexus 云服务器 X 凭借其高性能和高可用性,成为了众多企业和开发者的首选。本文旨在通过搭建基于 Flexus X 加速 MySQL 镜像的 XXL-JOB 任务调度
    的头像 发表于 12-29 15:45 54次阅读
    基于Flexus X加速MySQL镜像搭建XXL-JOB<b class='flag-5'>任务</b><b class='flag-5'>调度</b>平台

    ESP32C3任务执行一段时间,会出现任务不运行的问题,为什么?

    ESP32C3任务执行一段时间,会出现任务不运行的问题, 不运行的任务优先级低,并且任务的延时时间为vTaskDelay(100/ portTICK_PERIOD_MS);
    发表于 06-05 07:23

    鸿蒙开发接口资源调度:【@ohos.workScheduler (延迟任务调度)】

    开发者在开发应用时,通过调用延迟任务注册接口,注册对实时性要求不高的延迟任务,该任务默认由系统安排,在系统空闲时根据性能、功耗、热等情况进行调度执行。
    的头像 发表于 06-04 10:01 924次阅读
    鸿蒙开发接口资源<b class='flag-5'>调度</b>:【@ohos.workScheduler (延迟<b class='flag-5'>任务</b><b class='flag-5'>调度</b>)】

    STM32F303 ucos ii任务调度都用什么?

    现在303上用ucos ii跑了两个任务,一个是显示LCD,一个是读取FRAM。现在发现,若读FRAM的优先级高,有时LCD会花屏一闪,若显示优先级高,有时FRAM读出的数会不对。 目前是做个信号量做互锁,但这样跟不用系统时差不多了,同时只有一个任务在跑。 请问前辈们有什
    发表于 05-14 06:16

    请问CMSIS-RTOS RTX的任务调度锁在哪里?

    请问一下,CMSIS-RTOS RTX的任务调度锁在哪里?谢谢!
    发表于 05-13 08:28

    浅析FreeRTOS任务调度器的三种调度算法和应用

    FreeRTOS在MCU领域应用非常广泛,今天就给大家讲解一下FreeRTOS调度器中的三种调度算法,以及在瑞萨RZ/T2L MPU中的应用。
    的头像 发表于 05-10 14:02 7448次阅读
    浅析FreeRTOS<b class='flag-5'>任务</b><b class='flag-5'>调度</b>器的三种<b class='flag-5'>调度</b>算法和应用

    STM32CubeMX中的FreeRTOS创建3任务无法运行的原因?

    STM32CubeMX中的FreeRTOS 创建3任务 Task Priority =osPrioirityNoral 等级的任务,无法运行。 如果创建2个任务就可以。2个以上都不行
    发表于 05-09 07:02

    STM32F103VE运行的STM32CubeMX生成的freertos工程,FreeRTOS堆栈设置导致任务不执行切换怎么解决?

    TASK1任务堆栈更改为128的话,就不执行任务切换,只有TASK1的任务在运行 代码如下 #define START_TASK_PRIO 1 #define START_STK_SIZE128
    发表于 04-26 07:51

    STM32F103 FreeRTOS任务调度异常的原因?

    ) { vTaskDelay(500); //延时函数(任务调度) printf(\"Task1rn\");//串口打印 } } void Task2_Task(void
    发表于 04-16 06:24

    FreeRTOS任务调度器的三种调度算法讲解(下)

    配置如下时,调度算法就会变成不带时间片的抢占式调度
    的头像 发表于 03-21 13:46 2854次阅读
    FreeRTOS<b class='flag-5'>任务</b><b class='flag-5'>调度</b>器的三种<b class='flag-5'>调度</b>算法讲解(下)

    空调制热原理简单说明 空调制热开辅热和不开辅热的区别

    空调制热原理简单说明: 空调制热是利用空调系统中的制冷循环来实现的。制冷循环是根据热力学原理,通过改变制冷剂的状态变化,将室内热量转移到室外,从而降低室内温度。而在冬季,我们需要提高室内温度,因此
    的头像 发表于 02-04 15:08 1286次阅读

    鸿蒙开发【分布式任务调度】解析

    1.FA 迁移可以打通设备间的壁垒,有助于不同能力的设备进行互助。前文以一个简单的例子介绍如何通过分布式任务调度提供的能力,实现 FA 跨设备的迁移(包括 FA 启动及状态数据的同步)。 2.FA
    的头像 发表于 01-29 18:03 700次阅读

    鸿蒙OS 分布式任务调度

    鸿蒙OS 分布式任务调度概述 在 HarmonyO S中,分布式任务调度平台对搭载 HarmonyOS 的多设备构筑的“超级虚拟终端”提供统一的组件管理能力,为应用定义统一的能力基线、
    的头像 发表于 01-29 16:50 502次阅读

    鸿蒙原生应用/元服务开发-延迟任务开发实现(二)

    一、接口说明 接口名 接口描述 startWork(work: WorkInfo): void; 申请延迟任务 stopWork(work: WorkInfo, needCancel
    发表于 01-17 17:53

    鸿蒙原生应用/元服务开发-延迟任务说明(一)

    添加到执行队列,系统会根据内存、功耗、设备温度、用户使用习惯等统一调度拉起应用。 二、运行原理 图1 延迟任务实现原理 应用调用延迟任务接口添加、删除、查询延迟任务,延迟
    发表于 01-16 14:57