转载自: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. .net core 在 View 中使用 Jquery 无效问题

    问题描述: 在 View 视图中使用模板 _Layout.cshtml,其中模板已经调用了 Jquery.js ,但是在 View 视图下写 js 无效.后来通过浏览器查看自己写的 js 压根没加载出 ...

  2. react 父组件调用子组件方法、子组件调用父组件方法

    我们闲话不多说,直接上代码 // 父组件 import React, {Component} from 'react'; class Parents extends Component { const ...

  3. 使用Clion优雅的完全远程自动同步和远程调试c++

    摘要:在linux上用vim写C++的时候,通常用gdb进行调试,不能随心所欲的看代码和跳转代码以及加watch(也有可能是因为我还没有get正确的使用方法).为此我发现Clion可以做到自动同步本场 ...

  4. 阿里云CentOS服务器下安装Golang1.13并配置代理

    注:root账户或添加sudo命令运行. 下载到/usr/local位置并解压 cd /usr/local wget https://studygolang.com/dl/golang/go1.13. ...

  5. myeclipse安装android开发环境全过程

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/liang_824/article/det ...

  6. Channel概述

    前言 前两篇文章介绍了NIO核心部分部分之一的缓冲区的相关内容,接下来我们继续学习NIO中另一个重要的核心部分--Channel(通道). 在学习这篇文章之前,先做下简单的说明,本文是一篇关于通道的概 ...

  7. scarpy设置日志打印级别和存储位置

    在settings.py中配置 日志级别设置 LOG_LEVEL = 'ERROR' # 当LOG_LEVEL设置为ERROR时,在进行日志打印时,只是打印ERROR级别的日志 日志存储设置 LOG_ ...

  8. prometheus消耗内存问题

    参考: https://stackoverflow.com/questions/56115912/why-does-prometheus-consume-so-much-memory https:// ...

  9. Java3-5年经验面试题总结

    记录一下本次找工作所遇到的一些高频面试题,第一次找java工作,感觉比面试.net舒服多了,17年的时候出去找.net工作,由于在公司做的东西用到的技术少,除了mvc和ef,其他没啥问的,就追着项目问 ...

  10. Django:RestFramework之-------序列化器

    8.序列化 功能: 对请求数据进行验证 对Queryset进行序列化 8.1一个简单序列化: import json from api import models from rest_framewor ...