RT-Thread

RT-Thread中的链表结构

与世无争的帅哥 提交于 2020-01-23 16:46:35
文章目录 RT-Thread中的链表组织结构 RT-Thread中的链表操作 链表节点的插入 链表节点的删除 链表节点元素访问 RT-Thread中的链表组织结构   RT-Thread中的链表是带表头节点的双向循环链表结构,它的表头节点与之前的博客《 双向循环链表 》中介绍的表头节点不同,之前博客介绍的表头节点与后继节点结构是一致的,这是因为指针类型问题,前面介绍过的链表都是前驱节点指向后继节点的首地址,即指向节点结构体的指针。RT-Thread链表节点中的指针并不是指向节点首地址(这种说法并不严谨,尽管实际上它确实不是指向节点首地址),而是指向节点中的list结构体元素,这种链表结构让链表更加灵活。 /** * Double List structure */ struct rt_list_node { struct rt_list_node * next ; /**< point to next node. */ struct rt_list_node * prev ; /**< point to prev node. */ } ; typedef struct rt_list_node rt_list_t ; /**< Type for lists. */   RT-Thread中的链表指针定义为 rt_list_t ,而不是节点类型,这就可以使链表的操作(例如:插入、删除

RT-Thread nano 3.1.3 添加控制台与 FinSH

家住魔仙堡 提交于 2020-01-16 04:43:37
一、使用STM32CubeMX 5.5.0创建rt-thread nano工程 1.选择芯片,潘多拉开发板芯片为STM32L475VET6 2.设置PE7、PE8、PE9为推挽输出(用作验证) 3.添加RT-Thread nano 3.1.3 kernel 4.取消自动生成HardFault_Handler、PendSV_Handler、SysTick_Handler 代码 5.生成MDK工程文件 6.使用keil打开MDK工程,添加LED闪烁线程 //引入头文件 # include <rtthread.h> //初始化静态线程结构体和线程栈 static struct rt_thread led_thread ; static char led_thread_stack [ 256 ] ; //编写线程入口函数 static void led_thread_entry ( void * parameter ) { while ( 1 ) { HAL_GPIO_WritePin ( GPIOE , GPIO_PIN_7 , GPIO_PIN_RESET ) ; rt_thread_mdelay ( 500 ) ; HAL_GPIO_WritePin ( GPIOE , GPIO_PIN_7 , GPIO_PIN_SET ) ; rt_thread_mdelay ( 500 ) ;

RT-Thread USB虚拟串口收发调试

我与影子孤独终老i 提交于 2019-12-24 01:11:19
学习过程中参考博文: 记录——基于 RT-Thread 实现 USB 虚拟串口 但是遇到了两个问题: 1.串口有设备,但是不能发送; 2.串口能发送但不能接收; 第一个问题,是因为rtt的usb虚拟串口默认启用了RTS和DTR(终端准备好接收): static rt_err_t _interface_handler ( ufunction_t func , ureq_t setup ) { struct vcom * data ; RT_ASSERT ( func != RT_NULL ) ; RT_ASSERT ( func -> device != RT_NULL ) ; RT_ASSERT ( setup != RT_NULL ) ; data = ( struct vcom * ) func -> user_data ; switch ( setup -> bRequest ) { case CDC_SEND_ENCAPSULATED_COMMAND : break ; case CDC_GET_ENCAPSULATED_RESPONSE : break ; case CDC_SET_COMM_FEATURE : break ; case CDC_GET_COMM_FEATURE : break ; case CDC_CLEAR_COMM_FEATURE : break ;

RTTBSP再战(1)

徘徊边缘 提交于 2019-12-21 01:16:31
https://gitee.com/koson/TOUCH-RTT.git 本文快速完成TOUCH的BSP 只是做了LED的那个官方的 并且没有打包出去! 后面准备做MQTT啥的 最后一起打包 本文就是快速上手BSP 基于我之前的博客 很快搞定! 再次记录下 1--下载解压-开始干活 D:\BaiduNetdiskDownload\rt-thread-v3.1.3 2--准备我的工作路径STM32L471 D:\BaiduNetdiskDownload\rt-thread-v3.1.3\rt-thread\bsp\stm32\libraries\templates\stm32l4xx 上面这个文件夹是BDP给我的模板 我CP到外面【名字修改 stm32l4xx -> stm32l4xx-tsl-touch】 D:\BaiduNetdiskDownload\rt-thread-v3.1.3\rt-thread\bsp\stm32\stm32l4xx-tsl-touch 3--开始对接 进攻目标 D:\BaiduNetdiskDownload\rt-thread-v3.1.3\rt-thread\bsp\stm32\stm32l4xx-tsl-touch\board 第一步: D:\BaiduNetdiskDownload\rt-thread-v3.1.3\rt-thread\bsp

基于 Keil MDK 移植 RT-Thread Nano

有些话、适合烂在心里 提交于 2019-12-16 10:25:20
后文rtt代表RT-Thread 在官网公众号中,看到rtt发布了rtt nano,这个就很轻量级的rtos内核,把多余的驱动都裁剪了,因此移植工作量小,可以哪来学习一番,体验rtt之美 rtt现在也集成到cubemx5.0以上的平台,类似于freertos中间件,这个做法,倒是有点类似于大厂的风格了,看好rtt。 在keil5中,有两种方法可以移植rtt nano。 前提条件是:cubemx生成一个最小的裸机led系统。 MRTE的方法, 1、这个需要下载pack包RealThread::RT-Thread,keil有很多类似的第三方包,有ucos,freertos(这个比官网更新的都快,厉害了我的keil)rtx还是keil自带的免费rtos,这个我之前也有移植文档,也是很方便的。 安装好之后,左上方的写的小正方形,里面的rtos里面有很多选项。之前一直找不到, 是rtt的技术支持微信亲自指点的。因此需要注意。 我的选择如下: 其他的你也看到, 集成有很多rtos。 2、之后编译,会出现很多错误(重复定义之类),可以看到rtt的官网上,已经提到了,需要把很多中断Handler()注释掉,因为rtt自己已经实现了很多中断函数。 3、添加<rtthread.h>,把hal_delay()替换成rtt的延时函数,再次编译,即可一次成功。 源文件移植方法: 1、在现有的裸机工程中

skawu RT-Thread 学习笔记(二)---线程创建及任务间通信之中断锁

↘锁芯ラ 提交于 2019-12-10 00:07:10
源代码github网址: https://github.com/skawu/RT-Thread-STM32F103ZET6 ,在分支idcard中。 直接贴代码: 创建一个文件,内容如下: #include <stm32f10x.h> #include "thread_test.h" #include <rtthread.h> #include <rthw.h> /* 一、动态线程 初始化两个动态线程,它们拥有相同的入口函数,相同的优先级 但是它们的入口参数不同 二、任务间同步与通信 关闭中断进行全局变量的访问,关闭中断会导致整个系统不能响应外部中断, 所以需保证关闭中断的时间非常短。 */ #define THREAD_PRIORITY 25 #define THREAD_STACK_SIZE 512 #define THREAD_TIMESLICE 5 /* 定义静态全局变量 */ static rt_uint32_t count = 1; /* 指向线程控制块的指针 */ static rt_thread_t tid1 = RT_NULL; static rt_thread_t tid2 = RT_NULL; /* 静态全局变量操作函数 */ //待添加 /* 线程入口 */ //rt_uint32_t count = 0; /

【RT-Thread笔记】IO设备模型及GPIO设备

倖福魔咒の 提交于 2019-12-04 04:55:00
RTT内核对象——设备 RT-Thread有多种内核对象,其中设备device就是其中一种。 内核继承关系图如下: 设备继承关系图如下: device对象对应的结构体如下: 其中,设备类型type有如下几类: 设备的操作方法结构体: I/O设备模型框架 RT-Thread 提供了一套简单的 I/O 设备模型框架 : 应用程序通过 I/O 设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层 I/O 硬件设备进行数据(或控制)交互。 I/O 设备管理层:实现了对设备驱动程序的封装。 设备驱动程序的升级、更替不会对上层应用产生影响, 从而降低了代码的耦合性、复杂性,提高了系统的可靠性。 设备驱动框架层: 对同类硬件设备驱动的抽象, 将不同厂家的同类硬件设备驱动中相同的部分抽取出来。 设备驱动层: 是一组驱使硬件设备工作的程序,实现访问硬件设备的功能。 这一层是与硬件有关的,不同的芯片的同种外设驱动是不同的,STM32的GPIO驱动与NXP的GPIO驱动是不同的。这一层负责创建与注册I/O设备,对于操作逻辑简单的设备,可以不经过设备驱动框架层。 设备的两种注册方式 1、 对于操作逻辑简单的设备,可以不经过设备驱动框架层,直接将设备注册到 I/O 设备管理器中: 2、 对于另一些设备,如看门狗等,则会将创建的设备实例先注册到对应的设备驱动框架中,再由设备驱动框架向 I/O

【rt-thread】1、快速建立rt-thread nano最小裁剪工程

匿名 (未验证) 提交于 2019-12-03 00:08:02
1、下载rt-thread 3.03版本,3.03程序占用最小 2、使用 CubeMX 配置工程 3、选择添加rt-thread 4、编译后发现有三个函数冲突,在stm32f1xx_it.c中找到这几个函数注释 5、删除主程序中的HAL_Init、SystemClock_Config函数,这几个在别处定义过 6、由于之后用rt的堆栈这里可以把其实文件中的堆改成0,栈改成0x100,最后生成文件大小 Program Size : Code = 13058 RO - data = 1386 RW - data = 172 ZI - data = 2020 如果对工程大小没有要求,可以用软件包里的板demo 官网下载软件包,打开 rt-thread\bsp\stm32\stm32f103-atk-nano 文件夹编译,最后生成文件大小 Program Size : Code = 38212 RO - data = 6380 RW - data = 572 ZI - data = 2948 来源:博客园 作者: Eash、 链接:https://www.cnblogs.com/yywBlogW/p/11539529.html

RT-Thread学习笔记(二)―― RT-Thread启动代码及入口函数

匿名 (未验证) 提交于 2019-12-02 22:56:40
从本篇开始正式进入RT-Thread的开发学习,参考 RT-Thread快速入门实例教程 对RT-Thread作以初步了解,探究RT-Thread启动代码及用户入口函数。 1.工程结构 RTT工程文件夹说明 MDK工程结构 2.用户入口代码 上一节中,application文件夹中存放main.c文件,所以学习RTT的源码从这个文件入手,由浅到深,打开这个文件后可以看到里面内容很简单: 在这里不禁会有所疑惑,作为一个RTOS,main函数中竟然只有一行注释和return 0,are you kiding me?其实,正如那一句精辟的注释,user app entry,用户应用程序入口,这个main函数并不是我们平常所接触到的main函数, 这个main函数其实是由RTT呈现给我们的main函数 ,我们可以在此,在RTT操作系统之上编写我们的代码,即用户代码。 3.RT-Thread启动代码 了解了rtt的用户入口代码之后,再来看看RT-Thread是如何启动的?最好的办法是使用MDK的软件模拟debug功能,单步执行一遍程序,答案自然知晓。 首先编译工程,然后更改Debug模式为软件模拟模式,然后ctrl+F5进入debug模式,点击左上角复位按钮,将系统置于复位状态,因为RTT使用USART1打印信息,所以需要调出USART1串口便于观察(在View->Serial

STM32 & RT-Thread的逆向入门

ぐ巨炮叔叔 提交于 2019-12-01 01:35:27
STM32 & RT-Thread的逆向入门 backahasten@0xFA ​ 现在,各种MCU的价格越来越低,同等条件下能买到的ROM和RAM资源也多了。对一些复杂逻辑的应用,相比于花费大量的时间去扣底层还不如使用操作系统加快开发速度,使用了操作系统之后,针对固件的逆向会比无os的固件逆向有一些不同。 ​ RT-Thread是国产实时操作系统的典范,我个人的特别喜欢。RT-Thread有很多的BSP可以适配众多的芯片和架构,在本文还是使用最常见的stm32来进行介绍。 ​ 硬件上我是用了正点原子核RT-Thread联合开发的潘多拉开发板,在本文中没有使用潘多拉的硬件,我比较偷懒的使用了开发板配套的例子去做逆向。 启动 ​ 我一直相信一句话,不会开发也就不会安全,开发能力决定着安全能力的天花板。在逆向STM32 & RT-Thread的过程中也是这个样子的。我们打开一个bin文件,第一件事就是找到main函数,这个main函数并不是stm32的main函数而是操作系统的main函数。例如在stm32 & keil开发中,RT-Thread使用 $Sub$$main 调用初始化操作系统,如果是不带操作系统的裸开发,这个函数就是逻辑的main函数了。 ​ 详细的启动过程可以在 https://www.rt-thread.org/document/site/tutorial