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
    +关注

    关注

    2305

    文章

    11122

    浏览量

    371192
  • 任务调度
    +关注

    关注

    0

    文章

    27

    浏览量

    10167
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux-RT特点及简单应用

    :Linux-RT支持优先级继承(Priority Inheritance),避免了优先级反转问题,提高了实时任务的响应性能。 标准Linux内核的调度器(也称为CFS调度器)和实时内核调度
    发表于 12-05 07:37

    在多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?

    在多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?
    发表于 12-04 06:37

    STSW-STM32080文档说明

    电子发烧友网站提供《STSW-STM32080文档说明.pdf》资料免费下载
    发表于 11-20 17:18 0次下载

    freertos关闭任务调度的方法

    #include \"FreeRTOS.h\" #include \"task.h\" /* 关闭任务调度 */ void
    发表于 11-17 06:47

    FreeRTOS任务调度及优先级问题

    大家好,最近本人在学习FreeRTOS ,之前有过一些裸机开发的经验,目前知道了FreeRTOS的任务是基于时间片轮转来调度,也就是知道了任务会基于各个时间片来运行。 于是联想了如果有一些外设芯片
    发表于 11-06 02:18

    什么是模拟信号

    文章对模拟信号的有关内容做了简单说明
    的头像 发表于 10-18 16:47 1405次阅读
    什么是模拟信号

    Task任务:LuatOS实现“任务级并发”的核心引擎

    LuatOS应用程序运行的核心大脑——所有LuatOS应用项目都会使用到sys核心库。    sys核心库提供了四大类功能: Task任务 Message消息 Timer定时器 Run调度器 本文将
    的头像 发表于 08-28 13:49 340次阅读
    Task<b class='flag-5'>任务</b>:LuatOS实现“<b class='flag-5'>任务</b>级并发”的核心引擎

    揭秘LuatOS Task:多任务管理的“智能中枢”

    Task任务作为LuatOS的核心组成部分,通过智能化的任务管理机制,实现任务的创建、调度与协同运行,让复杂应用得以高效并行处理,满足实时场景下的严苛需求。 sys核心库是LuatOS
    的头像 发表于 08-28 13:48 397次阅读
    揭秘LuatOS Task:多<b class='flag-5'>任务</b>管理的“智能中枢”

    揭秘!基于RT-Thread探究“优先级反转”下的任务调度究竟是什么样的?| 技术集结

    本文将基于RT-Thread,结合RT-Trace调试器细化到实际任务调度的粒度,来调试并逐步讲解“优先级反转”的调度和运行逻辑。如果对RT-Trace感兴趣的可以看这篇文章:国产嵌入式调试器之光
    的头像 发表于 08-17 10:07 2813次阅读
    揭秘!基于RT-Thread探究“优先级反转”下的<b class='flag-5'>任务</b><b class='flag-5'>调度</b>究竟是什么样的?| 技术集结

    同步任务开发指导

    ,例如无法单例创建的类对象实现的方法。 使用TaskPool处理同步任务调度独立的任务,或者一系列任务为静态方法实现,或者可以通过单例构造唯一的句柄或类对象,可在不同
    发表于 06-19 07:57

    快速入门——LuatOS:sys库多任务管理实战攻略!

    在嵌入式开发中,多任务管理是提升系统效率的关键。本教程专为快速入门设计,聚焦LuatOS的sys库,通过实战案例带你快速掌握多任务创建、调度与同步技巧。无论你是零基础新手还是希望快速提升开发效率
    的头像 发表于 05-29 14:36 601次阅读
    快速入门——LuatOS:sys库多<b class='flag-5'>任务</b>管理实战攻略!

    工控一体机多线程任务调度优化:聚徽分享破解工业复杂流程高效协同密码

    任务调度作为工控一体机管理和协调各项任务的关键机制,其优化程度直接关乎工业生产的效率、稳定性与精准度,宛如一把关键钥匙,解锁工业复杂流程高效协同的大门。 工业复杂流程与多线程任务
    的头像 发表于 05-28 14:06 487次阅读

    简单认识全调度以太网技术

    调度以太网技术(Global Scheduling Ethernet,GSE)——基于报文容器PKTC转发和负载均衡,并实现全局调度
    的头像 发表于 01-15 14:31 1239次阅读
    <b class='flag-5'>简单</b>认识全<b class='flag-5'>调度</b>以太网技术

    SSTF中脉冲前倾的仿真

    任务: • 调整块长度 (L) 以补偿光栅对产生的噪声 • 改变光栅对的距离 (D) 以确定对脉冲前倾的影响 • 改变焦距 (f) 以确定对脉冲前倾的影响 光栅对在场中引入了噪声。如果不进行补偿
    发表于 12-31 09:04

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

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