当前位置: 首页 > 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做的留言板
  • 中国式社交网络就一个“约”字而已
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • es6--symbol
  • HomeBrew常规使用教程
  • Java比较器对数组,集合排序
  • JS专题之继承
  • oschina
  • python学习笔记 - ThreadLocal
  • 从PHP迁移至Golang - 基础篇
  • 分布式事物理论与实践
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 模型微调
  • 十年未变!安全,谁之责?(下)
  • 优化 Vue 项目编译文件大小
  • 在weex里面使用chart图表
  • 7行Python代码的人脸识别
  • Java总结 - String - 这篇请使劲喷我
  • 浅谈sql中的in与not in,exists与not exists的区别
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • (1)(1.11) SiK Radio v2(一)
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • .bat批处理(一):@echo off
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net Core与存储过程(一)
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • [ IO.File ] FileSystemWatcher
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析