当重启开发板直接挂载文件系统,就会看到 spi flash mount to /spi failed! 的提示,因为此时山瞎在 SPI Flash 中还没有创建相应类型的文件系统。
文件系统的挂载指的是将文件系统和具体的存储设备关联起来,并挂载到某个挂载点,这个挂载点即为这个文逗纤空件系统的根目录。
[图片上传失败...(image-dd0ae4-1563508716000)]
在 github 上有一份独立仓库: rtthread-apps ,这份仓库中放置了一些和动态模块。
编译成功会生成xxx.mo文件,将文件放置到rt-thread的文件系统上,就可以执行。
在msh命令中输入list_symbol命令。可以看到内核符号表(kernel symbol table)所竖丛映射的函数,这些函数就是模块模块开发当前能使用的函数
上述函数主要来自于rt-thread/src/xx.c文件、rt-thread/components/使用的组件xxx/src/xx.c文件
通过宏定义RTM_EXPORT(symbol) ,可以将函数导出到符号表。
rt_dlmodule结构体
动态模块API函数在rt-thread\components\libc\libdl\dlmodule.c文件中定义。
停止动态模块
你好,一、RT-Thread的定义RT-Thread,全称是 Real Time-Thread, 是一款主要衡吵由中国开源社区主导开发的开源实时 *** 作系统(许可证GPLv2),包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈、图形用户界面等。
相较于Linux,RT-Thread 具有体积小,成本低,功耗低、启动快速的优势。除此以外,实时性高、占用资源小等特点,使得它也非常适用于各种资源受限(如成本、功耗限制等)的场合。
在物联网设备的应用中,RT-Thread 能使用在线软件包管理工具,配合系统配置工具,实现直观、快速的模块化裁剪、无缝导入丰富的软件功能包,以及类似 Android 的图形界面和触摸滑动、智能语音交互等复杂功能。
RT-Thread 系统完全开源,可以免费在商业产品中使用,并且不需要公开私有代码。
二、RT-Thread的架构
相对于一些传统的RTOS 如 FreeRTOS、uC/OS 等,RT-Thread 架构上最大的区别在于:它是一个物联网 *** 作系统(IoT OS)。
即RT-Thread 除了包含一个实时内核外,还包括如文件系统、图形库等较为完整的中间件组件,是具备低功耗、安全、通信协议支持和云端连接能力的软件平台,如下图所示:
在这里插入图片描述
具体包括以下部分:
内核层:
① RT-Thread 内核:系统核心部分,包括了内核系统中对象的实现,例如多线程及其调度、消息队列、内存管理等;
② libcpu/BSP(芯片移植相关文件 / 板级支持包):与硬件密切相关,由外设驱动和 CPU 移植构成;
组件与服务层:
组件是基于内核之上的上层软消塌件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合;
RT-Thread 软件包:
运行于 RT-Thread 物联网 *** 作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。开发者可依据自身需求,选择、组合不同软件包,打造自己想要的系统。
目前支持的软件包有且不仅有:
① 物联网相关:Paho MQTT、WebClient、mongoose、WebTerminal 等;
② 脚本语言相关:JerryScript、MicroPython ;
③ 多媒体相关:Openmv、mupdf;
④ 系统相关:RTGUI、Persimmon UI、lwext4、partition、SQLite 等。
三、RT-Thread的开发工具
Env 是 RT-Thread 的开发辅助工具,提供编译构建环境、图形化系统配置、软件包管理等功能。主要特性如下:
使用 scons 作为构建工具(根据一定的规则或指令,将源代码编译成可执行的二进制程序)咐桥侍,提供编译环境,生成工程;
内置简单易用的配置剪裁工具——menuconfig,可对内核、组件和软件包进行自由裁剪,以搭积木的方式构建系统;
借助由 Kconfig 语法 编写的Kconfig 文件,生成系统配置文件 rtconfig.h。rtconfig.h 文件,负责在执行 menuconfig 命令时,指导生成 RT-Thread 系统的配置、剪裁界面;
提供多种软件包,可在线下载,各包耦合关联少,具有良好的可维护性。
一、添加驱动1、新增模拟SPI驱动文件(drv_soft_spi.c/h)
参考橡敏drv_spi.c/h,编写模拟SPI驱动
2、新增模拟SPI配置文件(soft_spi_config.h)
拷贝 \libraries\HAL_Drivers\config\f4\spi_config.h,重命令为soft_spi_config.h
#ifndef __SOFT_SPI_CONFIG_H__
#define __SOFT_SPI_CONFIG_H__
#include <rtthread.h>
#ifdef __cplusplus
extern "C" {
#endif
// CS(PG10) SCK(PG12) MISO(PF8) MOSI(PF9)
#ifdef BSP_USING_SOFT_SPI1
#ifndef SOFT_SPI1_BUS_CONFIG
#define SOFT_SPI1_BUS_CONFIG \
{\
.mosi_pin.GPIOx = GPIOF, \
.mosi_pin.GPIO_Pin = GPIO_PIN_9, \
.miso_pin.GPIOx = GPIOF, \
.miso_pin.GPIO_Pin = GPIO_PIN_8, \
.sclk_pin.GPIOx = GPIOG, \
.sclk_pin.GPIO_Pin = GPIO_PIN_12,\
.bus_name = "soft_spi1", \
}
#endif /* SOFT_SPI1_BUS_CONFIG */
#endif /* BSP_USING_SOFT_SPI1 */
#ifdef __cplusplus
}
#endif
#endif /*__SPI_CONFIG_H__ */
二、向工程添加文件
1、修改..\board\Kconfig
新增下内容
menu "Onboard Peripheral Drivers"
...
config BSP_USING_SPI_FLASH
bool "Enable SOFT-SPI FLASH (W25Q64)"
select BSP_USING_SOFT_SPI
select RT_USING_SFUD
select RT_SFUD_USING_SFDP
default n
...
menu "On-chip Peripheral Drivers"
...
menuconfig BSP_USING_SOFT_SPI
bool "Enable SOFT SPI BUS"
default n
select RT_USING_SOFT_SPI
if BSP_USING_SOFT_SPI
config BSP_USING_SOFT_SPI1
bool "Enable SOFT SPI1:CS(PG10) SCK(PG12) MISO(PF8) MOSI(PF9)"
default n
endif
...
2、修李数改\rt-thread\梁扰枝components\drivers\Kconfig
新增如下内容
config RT_USING_SPI
bool "Using SPI Bus/Device device drivers"
default n
if RT_USING_SPI
...
config RT_USING_SOFT_SPI //新增
bool "Enable SOFT SPI mode"
default n
...
3、修改..\libraries\HAL_Drivers\SConscript
新增如下内容
if GetDepend(['RT_USING_SOFT_SPI']):
src += ['drv_soft_spi.c']
4、修改..\libraries\HAL_Drivers\drv_config.h
新增如下内容
...
#include "f4/soft_spi_config.h"
...
三、使用驱动
1、ENV配置
开启模拟SPI
开启SFUD组件
2、设备初初始化
在spi_flash_init.c中添加如下内容,注册softspi1总线,注册softspi10设备并挂载到softspi1总线上;使能SFUD驱动W25Q64块
#include <rtthread.h>
#include "spi_flash.h"
#include "spi_flash_sfud.h"
#include "drv_soft_spi.h"
#if defined(BSP_USING_SPI_FLASH)
static int rt_hw_spi_flash_init(void)
{
__HAL_RCC_GPIOG_CLK_ENABLE()
rt_soft_spi_device_attach("softspi1", "softspi10", GPIOG, GPIO_PIN_10)
if (RT_NULL == rt_sfud_flash_probe("W25Q64", "softspi10"))
{
return -RT_ERROR
}
return RT_EOK
}
INIT_COMPONENT_EXPO
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)