转载自:https://blog.csdn.net/u011976086/article/details/54342447#commentBox

之前使用过ucos,freertos,但是这个keil自带的RTX倒是没有在项目中使用过,只有在安福莱的论坛中,头比较丰富的教程,网上正好看到了这篇文章,很详细,有截图,因此转载,自己也按照他的方式实现了,

1、keil5安装好后,自带RTX的系统,像以前的RTX51一样,

2、keil5默认使用stm32的标准外设库的,不像cubemx使用hal库,

3、他的外设使用类似于cubemx,因该有相互借鉴的嫌疑,我大致看了看,很多都选项卡一样,打勾等等,类似于nfr的位置文件,想起这个芯片,真是往事不堪回首。。

综述
从keil4到keil5,keil的功能越来越强大。特别是keil5之后,出现了RTE配置环境,我感觉特别方便,省去了那么多移植步骤,对于像我们这种“懒癌”真是福音啊!RTX这款实时操作系统还是我在逛论坛是发现的,不看不知道,一看忘不了啊!从此就觉得得好好研习一番,不过实时操作系统原理基本都一样。但是RTX有它独特之处,就是它中断延时对M3/M4内核可以实现零等待,带有免版税,确定性的RTOS。话不多说,咱们开始创建RTX工程。前提是你得安装了keil5,我的是5.22版本。

创建工程
1.创建一个新工程

2.选择你的平台芯片。(我的是F103VET6)

3.勾选必要的组件。这里RTOS有2个版本,我选择的是版本4,版本区别可以点击后面的Description链接查看说明。当勾选其中的一个组件时,RTE窗口会提示缺少的组件(感叹标志),此时缺少什么就勾选什么

此图是描述RTOS如何使用,就相当于用户手册一样

4.一个完整工程必要的组件。我创建的工程只是简单的使用实时系统闪了个灯。RCC、GPIO、Framework必不可少

5.勾选完组件后,点击OK,回到工程界面。然后给Source Group1增加mian.c文件

6.选择Use Code Template ,添加mian.c文件

7.配置RTE_Device.h 和 RTX_Conf_CM.c文件。RTE_devie.h文件要配置正确的时钟系统,(这个和nrf的工程很类似的,是不是~~~)

配置RTXConf,这些选项跟UCOSIII很相似,基本上看命名上就能读懂,(这里要注意始终频率,我自己生成的是12000000,显然不对,应该72000000)

8.添加bsp文件到工程中去,并增加头文件路径,(我在自己的工程中,没有这个文件,当然可以自定义)

编写用户任务,(这个和cubemx生成的已经很像了,说明已经做了一层封装)

RTX的任务编写同UCOS差不多,包括线程函数、线程ID、线程对象。其实,注释已经给你很好的提示啦,只需要按着照做就可以啦

编写完后,就可以编译下载运行了。

回顾流程,RTX使用还是非常简单。没有像UCOS、FreeRTOS移植那么麻烦。

当然,你使用keil4还是得移植,其移植也非常简单。

另外,可能有读者发现没有中断服务文件stm32f10x_it.c,当你要使用譬如串口中断服务时,需要添加中断服务函数,这个文件的添加跟mian.c的文件是一样的。当然,读者也可以将中断服务函数写在bsp文件里,但这不是我的习惯,我比较喜欢统一管理的方式(这个是比较好的,但是也有不放在it.c文件的)。

当然,更方便的是调试功能,从Debug选项卡选择OS Support->System and Thread viewr,可以看到当前系统运行的线程状态。另一个Event viewr选型则需要平台的调试接口留出swo接口才行,也就是标准的SWD接口。否则是用不了此功能。

总结

RTX和keil5联合使用,就如同双剑合璧,历害无比。使用keil调试RTX也是非常直观的,虽然ucos也有uc probe(这个需要破解)工具可以调试使用,但那个需要收费,不是很方便。况且,keil5的RTE环境还可以直接创建FileSystem、GUI、ETH、USB等复杂的工程,非常方便。
————————————————
原文链接:https://blog.csdn.net/u011976086/article/details/54342447

Keil5创建基于RTX的STM32工程(转载+自己的体会)的更多相关文章

  1. [STM32F10x] 从零开始创建一个基于标准库的工程

    硬件:STM32F103C8T6 平台:MDK-AMR V4.70 1.创建一个Keil uVision 的工程 要点:相同类型的源文件放在一起以便于管理       2.添加标准库源文件 3.添加几 ...

  2. 在linux下搭建STM32工程

    转载自康神博客:http://blog.csdn.net/u013298300/article/details/50243935 在LINUX下开始一个STM32工程 在LINUX下开始一个STM32 ...

  3. 使用keil建立标准STM32工程模版(图文详细版!)

    1.   模板工程的创建(超级详细版,使用的是keil 4.5版本) 1.1创建工程目录 良好的工程结构能让文件的管理更科学,让开发更容易更方便,希望大家养成良好的习惯,使用具有合理结构的工程目录,当 ...

  4. 利用cocoapods创建基于git的私有库

    上一篇文章记录了我利用cocoapods创建基于SVN的私有库的全部过程,今天我再记录一下基于git创建的过程. 整体先说明一下创建一个私有的podspec包括如下那么几个步骤: 创建并设置一个私有的 ...

  5. 基于ZigBee和STM32的智能家居控制系统的设计与实现(三)

    基于ZigBee和STM32的智能家居控制系统的设计与实现(三) 自从前两篇博客介绍了智能家居系统的基本实现机理后,收到了好多朋友的来信,和我讨论了好多的这方面的知识,在此很高兴,虽然自己做的这个所谓 ...

  6. 利用cocoapods创建基于git的私有库Spec Repo

    上一篇文章记录了我利用cocoapods创建基于SVN的私有库的全部过程,今天我再记录一下基于git创建的过程. 整体先说明一下创建一个私有的podspec包括如下那么几个步骤: 创建并设置一个私有的 ...

  7. Creating Dialogbased Windows Application (4) / 创建基于对话框的Windows应用程序(四)Edit Control、Combo Box的应用、Unicode转ANSI、Open File Dialog、文件读取、可变参数、文本框自动滚动 / VC++, Windows

    创建基于对话框的Windows应用程序(四)—— Edit Control.Combo Box的应用.Unicode转ANSI.Open File Dialog.文件读取.可变参数.自动滚动 之前的介 ...

  8. Creating Dialogbased Windows Application (3) / 创建基于对话框的Windows应用程序(三)Checkbox的应用、窗体置顶、设置图标 / VC++, Windows

    创建基于对话框的Windows应用程序(三) —— Checkbox的应用.窗体置顶.设置图标 上一节创建的窗体应用程序中,我们用到了Button和StaticText这两个控件.这一节中我们将学习使 ...

  9. Creating Dialogbased Windows Application (2) / 创建基于对话框的Windows应用程序(二)Button的应用、新建子窗体 / VC++, Windows

    创建基于对话框的Windows应用程序(二) —— Button的应用.新建子窗体 可以发现上一节创建的窗体中,点击OK和Cancel两个按钮是没有任何反应的.现在我们来为他们添加退出对话框的功能. ...

随机推荐

  1. 关于ThinkPHP独立分组的一些使用注意事项

    关于ThinkPHP的独立分组,功能看上去挺好的,可是官方并没有给出详细的例子和说明,在此,根据实际的开发过程,给予各位php开发人员以下几点说明: 1.独立分组的目录结构 和官方说明一样,建立Mod ...

  2. SpringCloud 基础

    目录 SpringCloud 基础 一.概述 二.服务发现组件 Eureka 1. 介绍 2. 搭建 Maven 父工程 3. 创建 Eureka 集群 4. 创建服务提供方集群 5. 创建服务消费方 ...

  3. JDK安装及配置——Linux系统

    一.首先下载JDK版本 链接如下:https://www.oracle.com/technetwork/java/javase/downloads/index.html 截止写博客时,最新版已经到12 ...

  4. js-beautify 不换行

    最近在用Hbuilder-X,自带js-beautify.但是默认格式化设置实在是看着太难受.来看看一个VX的格式化,参数愣是给用了三行才格式化完,而且两个参数还分开了,看着太难受. // mutat ...

  5. tomcat8 url包含|等特殊字符报错400的问题

    这个问题纠缠了我很久了,终于在今天早上解决了,感谢自己的不放弃和不断尝试的决心,我坚信,我可以找到解决方式!! 项目用的spring .spring mvc.hibernate框架,关于统一错误页面在 ...

  6. java 枚举示例

    public enum YNEnum { N(0,"否"), Y(1,"是"); private int code; private String name; ...

  7. spark存储模块之内存存储--MemeoryStore

    MemeoryStore 上一节,我们对BlockManager的主要写入方法做了一个整理,知道了BlockMananger的主要写入逻辑,以及对于块信息的管理.但是,由于spark的整个存储模块是在 ...

  8. 9.Javascript原生瀑布流

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  9. JavaScript 之 基本包装类型

    基本包装类型 为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String/Number/Boolean.  下面先看一段代码: var s1 = "Hello ...

  10. windows 2003 域控服务器导出全部hash的方法

    天下文章一大抄,我也是醉了... 一份“错误”的文章一遍又一遍的被转载,盲目转载,根本不细看.只会误导新手. 谈下windows2003域控下如何导出全部的hash信息. 1. 使用备份还原向导 2. ...