OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7376|回复: 12

【第2天】MDK下点灯,从0-1跟我一起实战入门“RT-Thread_Nano 3.0.3 内核”

[复制链接]

55

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2018-8-7
在线时间
55 小时
发表于 2018-8-17 16:04:55 | 显示全部楼层 |阅读模式
本帖最后由 Fillmore 于 2018-8-24 16:02 编辑

第一章    MDK下建立工程点个灯

file:///C:/Users/rtthr/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif

1.1 、工具准备
file:///C:/Users/rtthr/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif

下载 MDK,安装,说明一下 STM32 只两个系列是可以免费使用 MDK 的。下载 Nano,安装具体的过程略过,网上太多了,再写就浪费时间了。

1.2 、建立裸机工程文件
file:///C:/Users/rtthr/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif

本节主要介绍如何建立一个没有操作系统的工程,执行一个 while(1)超级循环。高手略过,新手 step by step
1.2.1 先建立一个文件夹
菜单上选择“Project→New uVision Project...”,如图 1-1 所示,之后弹出图 1-2 文件保存对话框





1-1 新建工程

1.2.3保存工程

图 1-2 工程文件保存
1.2.4选择芯片
文件保存之后,进行芯片选择,弹出图 1-3所示界面,芯片先好后,弹出配置界面,如图 1-4所示


图 1-3 选择工程对应的芯片


图 1-4 环境配置界面
1.2.5   环境配置(裸机)



选择“CMIS”下的“CORE”,选择“Device”下的“Startup”,如图 1-5 所示。确定后生成工程,如图 1-6

所示。


1-5 选择裸机环境配置

1.2.6  查看文件
6(2).jpg

1-6 生成的工程文件

1.2.7 修改工程结构

生成的那个名字,看着就不爽。如图 1-7 所示,在“Target1”上右键,选择“Manage Project Items...”对工程项目进行管理,组织其结构。弹出 1-8 界面,双击其中的条目进行名字修改。
7.jpg
图 1-7 修 改前修改后

8.jpg
图 1-8 修改过程



1.2.8新建 main.c

10.png

1-10 新 建txt 文件


1-11 新建文件夹


1-12 保存 main.c

1.2.9 添加到工程

将文件添加到工程中去,如图 1-13 所示,双击 App 文件夹,弹出添加文件对话框,选择main.c 文件,Add 后关闭。


图 1-13 添加源文件到工程

1.2.10 编写代码




右键插入头文件,不管什么,有就插入进来,这个是 MDK 识别过的,准没有错,空白右键,插入头文件, 如图 1-14 所示。然后编写main函数,如图 1-15所示




图 1-14 插入头文件


图 1-15 main.c 文件代码

1.2.11 编译


1-16 编译工程

1.2.12   模拟设置
编译正确没有错误,然后要进行验证,本文为了方便操作,使用模拟运行进行验证。

首先要对调试器进行设置,如图 1-17,点击选项,弹出的对话框中,选择“Debug”选项卡,然后选择 “use

Simulator”。

图 1-17 调试器设置

1.2.13   模拟运行


图 1-18 模拟运行

1.2.14 常见的错误解释与说明

到这里裸机的工程就完成了,是不是很简单?比以前在  MDK4 上文件复制来复制去,容易多了,其实这也是软件帮助完成了相关文件的复制(那些可能要修改的文件,才会复制出来)。

基本上在这个阶段不会出错,因为大部分工作都是软件做的,我们只是添加了一个main.c  文件,如果编译出错的话,查看一下语法有没有错。

可能会出错的地方,应改是没有找到对应的芯片,这是由于没有安装对应的库造成的,MDK5 和 MDK4 不同,在

MDK5 上所有的支持包都是通过 pack Installer 来完成的,如图。

图 1-19 支持包的安装与查看
如果没有装的,可以去 www.keil.com/pack上面下载对应的支持包。RT-Thread Nano 在上面也可以下载。

在建立工程时,文件添加错误,或是没有添加文件,怎么办呢?点击运行环境管理器,然后进入设置界面,  重新进行设置。




图 1-20 运行环境管理器的开启

1.3、添加 RT-Thread Nano


1.3.1 添加内核

在运行环境管理器中,定位到 RTOS,选择RT-Thread,注意,本文所使用的是 3.0.3,如果您还在使用 2.1.1, 在后面的示图中会有些不同,为了对比,请确认使用的版本是否一致。


图 1-21 添加 RTOS 内核



添加完内核心后, RT-Thread 内核文件会被工程引用,并复制出 board.c rtconfig.h 等文件, 位于

CRSytem_RTT3\RTE\RTOS\下,如图1-22 所示。


图 1-22 RT-Thread 内核所要改的文件

1.3.2   编写两个任务

为了测试操作系统是否能正常运行起来,添加两个任务,然后通过模拟运行,查看其内部是否可以实现任务切换,  如果有任务来回切换,说明系统已正常运行。

如图 1-23,添加任务代码,并初始化任务。

图 1-23 RTOS 下 的 main.c
1.3.3 main.c 代码

/*----------------------------Begin-------------------------------*/


#include "LPC17xx.h"       // Device  header

#include  "RTE_Components.h" //  Component  selection
#include  "RTE_Device.h"  //  Keil:evice:Startup
#include  <rtthread.h>


static  struct  rt_thread  led0_thread;
static  struct  rt_thread  save_thread; ALIGN(RT_ALIGN_SIZE)

static  rt_uint8_t  rt_led0_thread_stack[1024];
static  rt_uint8_t rt_save_thread_stack[1024];
   static void led0_thread_entry(void* parameter)

{

uint8_t  i  =  0; while(1)

{

i++;

rt_thread_delay(50); //

}

}


static void save_thread_entry(void* parameter)

{

uint8_t j  =  0;


{

j++;

rt_thread_delay(10); //

}

}


while(1)

int main(void)

{

rt_err_t result  =  RT_ERROR;

result  =  rt_thread_init(&led0_thread,  "led0",                                         //
led0_thread_entry,  RT_NULL,                                               //
&rt_led0_thread_stack[0],     //
sizeof(rt_led0_thread_stack),                                                      //

5,    //
20);        //


if (result ==  RT_EOK)

{

rt_thread_startup(&led0_thread);

}

result =  RT_ERROR;

result =  rt_thread_init(&save_thread,  "save",

save_thread_entry,

RT_NULL,                               //
&rt_save_thread_stack[0],                               //
sizeof(rt_save_thread_stack),                               //
4,    //

20);

if (result ==  RT_EOK)

{

rt_thread_startup(&save_thread);

}

return 0;

}


/*-----------------------------END----------------------------------*/

1.3.4   编译与仿真

添加两个断点,可以看到两个任务来回切换,并明显看到 save 这个任务先执行,说明优先级越小,优先级越高。

图 1-24 RT-Thread 模拟运行
1.4、说好的点个灯呢?

RT-Thread 好像有个叫 PIN 什么的,对于引脚控制,代码越多效率越低,直接写寄存器的效率是比较高的, 但是对人的要求也比较高,调用库文件中的函数效率也不会差到哪去,通常我们都会使用现成的参考代码

(没有?上网找去!MDK 里面也有很多例子,打开看去!)。
1.4.1  添加一个 GPIO 控制函数

图 1-25 点个灯
1.4.2 仿真

图 1-26 仿 真

1.4.3 那个监视窗口在哪里?

图 1-27 GPIO 口状态查看

下一章预告:
第二章  Finsh Shell
欢迎进群交流讨论
论坛交流群1.jpg
欢迎大家进群交流讨论












补充内容 (2018-8-24 17:43):
因为图片无法显示,本篇文章我会重新编辑
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

55

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2018-8-7
在线时间
55 小时
 楼主| 发表于 2018-8-17 17:53:31 | 显示全部楼层
为什么上传的图片 有一些无法显示?
回复 支持 反对

使用道具 举报

55

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2018-8-7
在线时间
55 小时
 楼主| 发表于 2018-9-3 18:27:46 | 显示全部楼层
因为图片无法显示,此贴我会重新发
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2018-2-18
在线时间
14 小时
发表于 2018-9-17 17:30:38 | 显示全部楼层
二维码过期了,楼主
回复 支持 反对

使用道具 举报

55

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2018-8-7
在线时间
55 小时
 楼主| 发表于 2018-9-17 17:59:12 | 显示全部楼层
论坛二维码.jpg

回复 支持 反对

使用道具 举报

55

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2018-8-7
在线时间
55 小时
 楼主| 发表于 2018-9-17 17:59:33 | 显示全部楼层
Hwy1 发表于 2018-9-17 17:30
二维码过期了,楼主

分享到楼下了
回复 支持 反对

使用道具 举报

55

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2018-8-7
在线时间
55 小时
 楼主| 发表于 2018-9-29 16:42:17 | 显示全部楼层

群聊论坛.jpg 群聊二维码的更新

回复 支持 反对

使用道具 举报

38

主题

182

帖子

0

精华

高级会员

Rank: 4

积分
584
金钱
584
注册时间
2011-6-3
在线时间
29 小时
发表于 2018-11-26 17:56:15 | 显示全部楼层
二维码已经过期
我的淘宝小店  http://shop70226598.taobao.com
回复 支持 反对

使用道具 举报

55

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2018-8-7
在线时间
55 小时
 楼主| 发表于 2018-11-27 09:47:41 | 显示全部楼层
回复 支持 反对

使用道具 举报

7

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
349
金钱
349
注册时间
2018-7-19
在线时间
50 小时
发表于 2018-11-29 14:15:48 | 显示全部楼层
大佬我想跟着学RT-Thread但是这个二维码老是过期,请问一下可以创建一个QQ群么
回复 支持 反对

使用道具 举报

55

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2018-8-7
在线时间
55 小时
 楼主| 发表于 2018-12-3 16:18:45 | 显示全部楼层
无法长大 发表于 2018-11-29 14:15
大佬我想跟着学RT-Thread但是这个二维码老是过期,请问一下可以创建一个QQ群么

QQ群:477914102  相加微信群或者需要资料可以加微信:RT-Thread2006
回复 支持 反对

使用道具 举报

7

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
349
金钱
349
注册时间
2018-7-19
在线时间
50 小时
发表于 2018-12-3 20:24:36 | 显示全部楼层
Fillmore 发表于 2018-12-3 16:18
QQ群:477914102  相加微信群或者需要资料可以加微信:RT-Thread2006

好的,非常感谢
回复 支持 反对

使用道具 举报

0

主题

295

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-3-26
在线时间
9 小时
发表于 2019-4-19 09:08:59 | 显示全部楼层
多谢楼主的分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表