使用 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();
/* 硬件初始化 */
bsp_Init();
/* 创建任务 */
AppTaskCreate();
/* 创建任务通信机制 */
AppObjCreate();
/* 启动调度,开始执行任务 */
vTaskStartScheduler();
/*
如果系统正常启动是不会运行到这里的,运行到这里极有可能是用于定时器任务或者空闲任务的
heap 空间不足造成创建失败,此要加大 FreeRTOSConfig.h 文件中定义的 heap 大小:
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )
*/
while();
}
中断优先级分组设置
强烈推荐用户将 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的随笔目录,方便之后复习的浏览。
之后的提高篇是根据自己的使用经验的分享。
使用 FreeRTOS 时注意事项总结(基础篇教程完结)的更多相关文章
- FreeRTOS基础篇教程目录汇总
以下教程(大部分章节)(尤其理论介绍部分)转载自安富莱电子,官网链接: http://forum.armfly.com/forum.php 然后根据安富莱的教程自己做了分析和测试,希望大家共同进步. ...
- TypeScript学习文档-基础篇(完结)
目录 TypeScript学习第一章:TypeScript初识 1.1 TypeScript学习初见 1.2 TypeScript介绍 1.3 JS .TS 和 ES之间的关系 1.4 TS的竞争者有 ...
- (十分钟视频教程)nodejs基础实战教程3:react服务端渲染入门篇
视频截图如下: (具体视频见文末) 前言: 这是小猫的第三篇node教程,本篇内容是由公众号粉丝票选得出的,相信大家对这篇教程是抱有较大希望的,这篇教程由小猫和一位多年的好朋友合作完成(笔名:谷雨,博 ...
- Linux随笔-鸟哥Linux基础篇学习总结(全)
Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...
- iOS开发 - OC - block的详解 - 基础篇
深入理解oc中的block 苹果在Mac OS X10.6 和iOS 4之后引入了block语法.这一举动对于许多OC使用者的编码风格改变很大.就我本人而言,感觉block用起来还是很爽的,但一直以来 ...
- SWA2G422&485JK2G基础篇: 硬件使用说明
开发板板载介绍(当前使用的测试板,以后期最终版为准) 一,实物图 硬件说明 一,开发板主控芯片说明: 1. 单片机: STM32F103RET6 2. GPRS模块: Air202 二,开发板外设说明 ...
- python基础篇(二)
PYTHON基础篇(二) if:else,缩进 A:if的基础格式和缩进 B:循环判断 C:range()函数和len()函数 D:break,contiue和pass语句 for,while循环 函 ...
- python基础篇(三)
PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...
- cocos2dx基础篇(3) 常用重要类
---------------------------------------- 入口类main.cpp 主要控制类AppDelegate.cpp -------------------------- ...
随机推荐
- eclipse查看源码失败总结
之前看的网上查看源码的方法,查看了JDK,只是知其然不知所以然. 后来发现要是查看其他源码,总是查看失败. 最开始每次点击Attach Source包到所要查看源码的jar包,但是还是这样. 但是依 ...
- C#:确保绑定到同一数据源的多个控件保持同步
下面的代码示例演示如何使用 BindingSource 组件,将三个控件(两个文本框控件和一个 DataGridView 控件)绑定到 DataSet 中的同一列.该示例演示如何处理BindingCo ...
- 如何在 Linux 下调试动态链接库
大家都知道在 Linux 可以用 gdb 来调试应用程序,当然前提是用 gcc 编译程序时要加上 -g 参数.我这篇文章里将讨论一下用 gdb 来调试动态链接库的问题. 首先,假设我们准备这样的一个动 ...
- linuxGDB下动态链接库的调试
(gdb) file <你的exe>(gdb) load <你的so> #这条应该是可选的 (gdb) dir <so'dir>(gd ...
- iOS自定义从底部弹上来的View
概述 自定义蒙层弹起View,点击一下遮罩或界面上关闭按钮,页面会自动下去(从上向下) 详细 代码下载:http://www.demodashi.com/demo/10724.html 在一些少数据没 ...
- Android API之android.provider.ContactsContract
android.provider.ContactsContract ContactsContract是联系人provider和app的contract.定义了已支持的URL和column.取代了之前的 ...
- 网站跳转到cgi-sys/defaultwebpage.cgi的原因和解决方式
cpanel遇到这种问题,看了这篇文章老鹰主机域名解析A记录教程–关于cgi-sys/defaultwebpage.cgi后,尝试后 首先ping 域名,结果如下 看到没有ping结果 ...
- eclipse代码格式化设置
http://www.cnblogs.com/zhxiaomiao/archive/2010/06/19/1760995.html java---code style ---formatter 首先新 ...
- List Set Map以及子接口用法总结(转)
Collection ├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap └WeakHashMap list 和 ...
- pythonl练习笔记——PythonNet 套接字socket
1 套接字socket 1.1 套接字概述 套接字,一种网络通讯工具:用于进行网络间的通信,是一种特殊文件类型, 套接字,是一个通信链的句柄,用于描述IP地址和端口,实现向网络发出请求或应答网络请求. ...