Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
mo动态模块_Module
应用模块打开之后unload之后还在内存中
发布于 2014-12-27 23:18:03 浏览:2334
订阅该版
我使用了libdl,使用的是官方提供的一个例子(在examplesmodule中的自己稍微改了一下),首先使用finsh下面执行extapp.so,在extapp中我使用dlopen打开了basicapp,然后执行了其中一个函数,按道理在最后使用了dlclose(handle);应该是卸载了,但是使用list_module()发现还在,如下 ```module name ref ------------ -------- basicapp -1 extapp 1 0, 0x00000000``` 但thread没有了 ```finsh>>list_thread() thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- tidle 0x1f ready 0x00000054 0x00000400 0x000000c0 0x00000011 000 tshell 0x14 ready 0x000000b4 0x00000800 0x00000394 0x0000000a 000 led2 0x0b suspend 0x00000234 0x00001000 0x00000234 0x00000005 000 led1 0x0b suspend 0x00000134 0x00000400 0x00000134 0x00000005 000``` 请问一下这个是什么问题啊? basicapp.c ```#include
static int a = 0; static int b = 1000000; int c = 100; static void function(int count1, int count2, int count3) { rt_kprintf("Hello RT-Thread %d %d ", count1, count2, count3); } int main(void) { int i; rt_kprintf("application entry "); rt_kprintf("[addr]a-0x%x,b-0x%x,c-0x%x ", &a, &b, &c); rt_kprintf("[value]a-%d,b-%d,c-%d ", a, b, c); for(i=0; i<100; i++) { a++; b--; c++; function(a, c, b ); } return 0; } int fn() { rt_kprintf("fn! "); return 0; }``` extapp.so ```#include
#include
typedef void (*func)(void); int main(void) { func f1, f2, f3, f4, f5; void* handle = dlopen("basicapp.so", RTLD_NOW); if(handle == RT_NULL) rt_kprintf("RT_NULL, can not open it! "); if(handle != RT_NULL) { f1= (func)dlsym(handle, "fn"); if(f1 != RT_NULL) (*f1)(); else rt_kprintf("dlsym fn failed. "); } if(handle != RT_NULL) { dlclose(handle); rt_kprintf("close basicapp.so"); } return 0; }```
查看更多
4
个回答
默认排序
按发布时间排序
bernard
2014-12-28
这家伙很懒,什么也没写!
好像不是,libdl的处理方式和应用模块还不一样。libdl针对的是.so,应用模块是.mo
lee88688
2014-12-28
这家伙很懒,什么也没写!
>好像不是,libdl的处理方式和应用模块还不一样。libdl针对的是.so,应用模块是.mo --- 不过我看官方给的文档中,应用模块的编译都是编译的.so文件。我这个问题应该怎么解决啊
lee88688
2014-12-30
这家伙很懒,什么也没写!
我之后查看了一下dlclose函数代码,发现只是在引用小于零的时候调用rt_module_unload函数,之前使用finsh查看basicapp引用是小于0了,按常理应该是使用了rt_module_unload函数,我觉得使用就应该被销毁了啊。不过我查看了rt_module_unload的代码才知道,这个函数只是销毁内核对象和模块创建的线程,并没有销毁模块,因此保留下来了,不知道是不是这样的啊,有时间验证一下。
撰写答案
登录
注册新账号
关注者
0
被浏览
2.3k
关于作者
lee88688
这家伙很懒,什么也没写!
提问
8
回答
17
被采纳
0
关注TA
发私信
相关问题
1
貌似stm32f10x的应用模块在1.2.x版本不能正常编译
2
关于module.c的_load_shared_object的疑问
3
应用模块的rt_module_unload函数的bug
4
rtt 如何实现动态加载app
5
使用zmodem传输文件,应用模块文件传输完成,访问失败
6
RTT下应用模块编译具体方法
7
RTT应用模块编译出错
8
RTT应用模块编译问题
9
求问动态模块是什么意思呢
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组件
最新文章
1
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
2
RT-Thread中的time溢出问题,时间戳溢出,解决方法
3
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
4
SystemView线程名字不显示
5
只用网页也能跑RT-Smart 无门槛腾讯Cloud studio + smart-build快速构建
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
9
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
YZRD
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部