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

使用 FreeRTOS 时注意事项总结(基础篇教程完结)

以下转载自安富莱电子: http://forum.armfly.com/forum.php

FreeRTOS 的初始化流程
推荐的初始化流程如下,本教程配套的所有例子都是采用的这种形式,当然,不限制必须采用这种初
始化方式,适合自己项目的才是最好的: 

 

int main(void)
{
/*
在启动调度前,为了防止初始化 STM32 外设时有中断服务程序执行,这里禁止全局中断(除了 NMI 和 HardFault)。
这样做的好处是:
1. 防止执行的中断服务程序中有 FreeRTOS 的 API 函数。
2. 保证系统正常启动,不受别的中断影响。
3. 关于是否关闭全局中断,大家根据自己的实际情况设置即可。
在移植文件 port.c 中的函数 prvStartFirstTask 中会重新开启全局中断。通过指令 cpsie i 开启,__set_PRIMASK(1)
和 cpsie i 是等效的。
*/
    __set_PRIMASK(1);
/* 硬件初始化 */
    bsp_Init();
/* 创建任务 */
    AppTaskCreate();
/* 创建任务通信机制 */
    AppObjCreate();
/* 启动调度,开始执行任务 */
    vTaskStartScheduler();
/*
如果系统正常启动是不会运行到这里的,运行到这里极有可能是用于定时器任务或者空闲任务的
heap 空间不足造成创建失败,此要加大 FreeRTOSConfig.h 文件中定义的 heap 大小:
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )
*/
        while(1);
}    

 

中断优先级分组设置
强烈推荐用户将 Cortex-M3 内核的 STM32F103 和 Cortex-M4 内核的 STM32F407 以及 F429 的
NVIC 优先级分组设置为 4,即:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);这样中断优先级的
管理将非常方便。 此函数在 bsp_Init 中第一个被调用:

 

FreeRTOS 中使用中断注意事项
对于初学者来说,首先,务必要把FreeRTOS 中断优先级配置弄明白,非常重要。 其次,
FreeRTOS 中断方式的同步或者通信机制,在教程中都有配套的例子及其使用注意事项,使用时务必要注
意。 另外,用户要注意以下两个问题,在前面的章节中也有啰嗦过:
PendSV 中断,SysTick 中断和 SVC 0 中断用户不可调用,这三个被 FreeRTOS 占用。
对于 STM32F103,STM32F407 和 STM32F429 来说,当用户将优先级分组设置为 4 的时候,PendSV
的中断优先级是 15,SysTick 的中断优先级也是 15,而 SVC 的中断优先级是 0。 其中 SVC 中断,仅
在系统启动的时候调用了一次。

FreeRTOS 官方整理的 FAQ
官方总结的问题汇总地址:http://www.freertos.org/FAQ.html

写在最后:

到这里,FreeRTOS的基础篇,即了解基本操作系统原理和能使用提供的API函数操作已经告一段落,如果确实到了需要分析源码和汇编的时候,再进行之后的提高练习。先做好应用层,再慢慢深入。提高自身水平的永远是自己的不断学习,不断练习,多动手操作,多动脑思考,有了FreeRTOS基础之后,学习之后的小型嵌入式系统,会很得心应手。最后会出一个所有关于FreeRTOS的随笔目录,方便之后复习的浏览。

 之后的提高篇是根据自己的使用经验的分享。

相关文章:

  • 推荐系统中的矩阵分解演变方式
  • Java——操作Excel表格,读取表格内容
  • 伊吹萃香
  • BZOJ 1878 SDOI2009 HH的项链 树状数组/莫队算法
  • 数据库对象
  • 中文分词--逆向最大匹配
  • servlet文件下载2(单文件下载和批量下载)
  • php 上传文件
  • 程序员工作中绕不开的9大问题,你遇到过几个?
  • Adobe将于2020年末停止对Flash的支持
  • quick-cocos2d-x教程9:实例之加上背景图片
  • iOS将数组中的内容分拼接成字符串
  • 如何使用阿里云虚拟主机搭建博客(二)搭建篇
  • create-react-app做的留言板
  • 中国式社交网络就一个“约”字而已
  • 分享的文章《人生如棋》
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js对象的深浅拷贝
  • leetcode98. Validate Binary Search Tree
  • mysql 5.6 原生Online DDL解析
  • php ci框架整合银盛支付
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 利用DataURL技术在网页上显示图片
  • 聊聊flink的BlobWriter
  • 前端之Sass/Scss实战笔记
  • 责任链模式的两种实现
  • 正则学习笔记
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • hi-nginx-1.3.4编译安装
  • Java数据解析之JSON
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​比特币大跌的 2 个原因
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (3)llvm ir转换过程
  • (十) 初识 Docker file
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (学习日记)2024.02.29:UCOSIII第二节
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net 7 上传文件踩坑
  • .NET Core 中插件式开发实现
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 事件模型教程(二)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET大文件上传知识整理
  • [04] Android逐帧动画(一)
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [2021 蓝帽杯] One Pointer PHP
  • [AIGC] 使用Curl进行网络请求的常见用法