Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
STM32
mo动态模块_Module
使用STM32运行RTT动态模块
发布于 2020-07-14 22:17:43 浏览:2193
订阅该版
[tocm] ## **平台**:正点原子H7开发板 ## **参考文章**: [动态模块](https://www.rt-thread.org/document/site/programming-manual/dlmodule/dlmodule/) [使用 QEMU 运行动态模块组件](https://www.rt-thread.org/document/site/application-note/components/dlmodule/an0023-dlmodule/) ## **过程记录** ### 编译过程分两部分,1 编译能支持动态模块的固件,2 编译动态模块 - 首先,根据参考文章中的说明,编译支持运行动态模块的固件,主要是开启动态模块的支持和开启SD卡的驱动,因为最终编译的动态模块需要在文件系统中。进入到bsp目录,使用env工具配置如下: ![image.png](/uploads/20200714/84cf9feb44cb02ef1b22d382d0826e9a.png) ![image.png](/uploads/20200714/d084781d0d7a8aa1dcd6beacf4edb6d8.png) 为了支持动态模块的运行,修改 bsp 对应的 rtconfig.py 中编译动态模块时需要用到的配置参数,拷贝参考文章中的参数如下: ![image.png](/uploads/20200714/1b7e69675c87c2b151fd13882f8eb5cf.png) 编译的固件中会导出符号表供动态模块使用,放在名字是 RTMSymTab 的段中,连接脚本中添加相关信息,如下图: ![image.png](/uploads/20200714/8d62a30370558f2aad144b0747bf9133.png) 执行 scons 编译,出现错误如下,这是因为刚刚赋值到python脚本中的参数使用了TAB键 ![image.png](/uploads/20200714/5b1785c15ddd8a591fcc91b529d92cac.png) 将TAB键修改为空格,保存,再次编译,出现如下错误,脚本中没有 strip 命令 ![image.png](/uploads/20200714/a929a5b74ef3e33ca079b9941abde33e.png) 添加命令,保存, ![image.png](/uploads/20200714/d972bd6d83ea094f730abda3ded52a54.png) 再次编译 ![image.png](/uploads/20200714/0f9175adbae11835a9a05de681fcb363.png) 编译成功,生成bin文件。执行 `scons --target=ua -s` 来生成编译动态模块时需要包括的内核头文件搜索路径及全局宏定义 将bin文件下载到开发板,运行 ![image.png](/uploads/20200714/f93dbe2819a34d0eb05cc4f6f4043ba6.png) 可以看到,SD卡挂载成功,动态模块对应的命令也正确生成。 - 编译动态模块 首先下载[动态模块资源库](https://github.com/RT-Thread/rtthread-apps),进入到对应目录设置如下变量: RTT_ROOT - 指向到 RT-Thread 代码的根目录; BSP_ROOT - 指向到 BSP 的工程目录; ![image.png](/uploads/20200714/bf1089c741078aaadaab9b61c0924949.png) 然后,执行 scons --app=hello 出现如下错误 ![image.png](/uploads/20200714/a9eb190fb24c0b7f7a39d6e0215cd4c7.png) 可以看出,错误的原因是命令行参数中没有空格,导致不能识别,修改python脚本中的相应命令参数。 在参数' -mlong-calls -fPIC'前加空格,保存重新编译,出现 puts 未定义,这个函数应该是libc组件中的啊,前面配置了的,为什 么显示未定义呢? ![image.png](/uploads/20200714/757801892c3c056d7537ae81fc8dc685.png) 在串口控制台中执行命令 list_symbols 打印导出的符号 ![image.png](/uploads/20200714/73c226a1d970bc729b276ca7f09c493d.png) 符号明明导出了啊!!!为什么不识别呢??? 经过各种测试最终发现,每个参数的前面都加一个空格就好了! ![image.png](/uploads/20200714/5b01e8cacf098b9d1fe6094adc01a9c0.png) 再次编译,终于出现动态模块的.mo文件了。 ![image.png](/uploads/20200714/e5f1da2137a32e589dc9f376a130be88.png) 设置输出目录也有了 ![image.png](/uploads/20200714/5662d9fa91e8a8de70966ca25c3c1cd0.png) 将生成的文件拷贝到SD卡中,重新上电 ![image.png](/uploads/20200714/d911997721fec7d3520357f97c2d2029.png) 终于打印出来了。 总结: 1. 折腾的比较久的地方就是 puts 未定义这个错误,实际上从脚本中可以看出,参数之间都有空格的。 2. 调试过程中会产生 hello.exe 文件,这个是环境变量RTT_ROOT和BSP_ROOT未设置对。 ![image.png](/uploads/20200714/e658b141c489b11e3ec8d06f6a5e27f5.png) 3. 动态模块现在只支持gcc编译,所有的操作都在env环境下,编译器用的就是gcc。
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
liuduanfei
这家伙很懒,什么也没写!
文章
1
回答
449
被采纳
94
关注TA
发私信
相关文章
1
貌似stm32f10x的应用模块在1.2.x版本不能正常编译
2
应用模块打开之后unload之后还在内存中
3
关于module.c的_load_shared_object的疑问
4
应用模块的rt_module_unload函数的bug
5
rtt 如何实现动态加载app
6
使用zmodem传输文件,应用模块文件传输完成,访问失败
7
RTT下应用模块编译具体方法
8
RTT应用模块编译出错
9
RTT应用模块编译问题
10
求问动态模块是什么意思呢
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部