Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
SQLite
sqlite3的初始化函数sqlite3_initialize死机
发布于 2019-05-27 23:25:59 浏览:4277
订阅该版
sqlite3的移植是不是哪个地方动了?记得以前调用sqlite3_initialize是正常的,我还测试了很久都挺好的. 最近下了最新的sqlite3软件包测试,每次调用sqlite3_initialize都会直接挂掉,shell打印 ``` (obj != object) assertion failed at function:rt_object_init, line number:265 ``` 经跟踪发现`sqlite3_initialize`初始化是会依次调用`sqlite3MutexInit()` ... 中间若干函数,然后调用`sqlite3OsInit()`函数 而这个`sqlite3OsInit()`函数会调用`sqlite3_malloc`函数,这个`sqlite3_malloc`又会嵌套调用`sqlite3_initialize()`函数,即而挂在`sqlite3MutexInit()`函数里. 这是什么鬼?我看`sqlite3`的移植也没有更新过呀
查看更多
15
个回答
默认排序
按发布时间排序
tsx1983
2019-05-27
这家伙很懒,什么也没写!
相当于sqlite3MutexInit()函数重复初始化导致挂掉了
还没想好
2019-05-28
这家伙很懒,什么也没写!
记得某次更新,内核对象做了一些检查,防止重复初始化
tsx1983
2019-05-29
这家伙很懒,什么也没写!
在sqlite3MutexInit()函数里加了已经初始化过了就直接返回成功的处理后,sqlite3_initialize能成功了,但是执行插入操作的时候会死在文件的信号量初始化上面. 看来系统更新到最新版本后,sqlite组件需要重新移植了,不然没法用了
slyant
2019-05-29
这家伙很懒,什么也没写!
官方的软件包移值有BUG,我修改后可以使用,但仅支持单线程,自己在应用层控制一下,加互斥锁 下载附件 - [sqlite3.c](https://club.rt-thread.org/uploads/201905/29/111146yylqsvlzw1lg7wyp.attach) - [rtthread_io_methods.c](https://club.rt-thread.org/uploads/201905/29/111247m7uh61y2n55uj7jh.attach)
tsx1983
2019-05-29
这家伙很懒,什么也没写!
>官方的软件包移值有BUG,我修改后可以使用,但仅支持单线程,自己在应用层控制一下,加互斥锁 多谢多谢
aozima
2019-05-29
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
学习发PR哦!
slyant
2019-06-04
这家伙很懒,什么也没写!
>学习发PR哦! 改成了单线程,不符合RTT标准。多线程使用了大量的互斥量信号量,太复杂了,没有改成功,高手帮忙改一下PR,造福大家啊
slyant
2019-06-04
这家伙很懒,什么也没写!
>改成了单线程,不符合RTT标准。多线程使用了大量的互斥量信号量,太复杂了,没有改成功,高手帮忙改一下P ... 问题 就出在互斥量信号量用完没有及时脱离,再次重复初始化,把互斥量和信号量的系统链表搞乱了,现在新版本的RTT应该限制重复初始化了,但解决不了根本问题
lizhen9880
认证专家
2019-06-06
这家伙很懒,什么也没写!
>学习发PR哦! 刚才调试我遇到了一模一样的问题,跟踪发现是重复初始化互斥量触发了重复初始化内核对象的断言,正如题主描述的一样,正在考虑如何解决,你这有没有好的方案? --- 补充: 这个问题已修复并PR,原因确实同二楼 @还没想好 所述 楼主可通过更新最新的软件包解决此问题。 具体修复过程如下: ## 兼容性问题修复 SQLite数据库RT-Thread的3.1.3以上及其以上的版本出现了些兼容性问题。 ### 初始化报错 使用ENV配置并编译运行,在调用sqlite3_initialize时报错: ``` (obj != object) assertion failed at function:rt_object_init, line number:267 ``` 根据报错定位至object.c文件rt_object_init方法中 ```c /* try to find object */ for (node = information->object_list.next; node != &(information->object_list); node = node->next) { struct rt_object *obj; obj = rt_list_entry(node, struct rt_object, list); if (obj) /* skip warning when disable debug */ { RT_ASSERT(obj != object); } } /* leave critical */ ``` 这段代码是为了放防止对象重复插入链表,意味着系统在初始化sqlite时有对象重复初始化了。通过单步调试以及查看已被压栈的方法及变量,发现是重复初始化导致,在头文件sqlite_config_rtthread.h中增加宏定义#define SQLITE_OMIT_AUTOINIT得以解决。 ### 插入报错 初始化问题解决后,成功创建了数据库文件m.db。但是在执行插入操作是再次出现 ``` (obj != object) assertion failed at function:rt_object_init, line number:267 ``` 还是通过查看栈内方法及变量,配合单步调试定位到问题,在rtthread_io_methods.c和rtthread_vfs.c中,每次打开操作时都会调用rt_sem_init来初始化信号量"vfssem"作为文件描述符的锁,rt_sem_init会将信号量添加到对象列表,但是在关闭操作时未将"vfssem"从对象列表中剔除,导致了这个报错。所以在rtthread_io_methods.c文件_rtthread_io_close方法中增加rt_sem_detach操作: ```c static int _rtthread_io_close(sqlite3_file *file_id) { int rc = 0; RTTHREAD_SQLITE_FILE_T *file = (RTTHREAD_SQLITE_FILE_T*)file_id; if (file->fd >= 0) { _rtthread_io_unlock(file_id, NO_LOCK); rt_sem_detach(&file->sem); rc = close(file->fd); file->fd = -1; } return rc; } ```
tsx1983
2019-06-07
这家伙很懒,什么也没写!
>官方的软件包移值有BUG,我修改后可以使用,但仅支持单线程,自己在应用层控制一下,加互斥锁 --- 按照你的方法改完,在SD卡上运行是没问题.但是在yaffs文件系统上建表时就会创建失败.这个问题一直困扰着我.只有在SD卡的FAT文件系统上能正常运行,但在任何基于flash的文件系统上运行就会出现无法建表的情况
撰写答案
登录
注册新账号
关注者
0
被浏览
4.3k
关于作者
tsx1983
这家伙很懒,什么也没写!
提问
18
回答
65
被采纳
0
关注TA
发私信
相关问题
1
Rtt如何使用sqlite?
2
关于sqlite的问题
3
招募测试人员,尝鲜最新版SQLite3 .19.3
4
哪位坛友能提供个SQLite3.81的原始版本么?
5
rt-thread组建sqlite3加入工程编译通不过
6
sqlite3数据库操作问题
7
RTT3.0 sqlite3编译报错问题
8
关于sqlite3编译报错问题
9
在stm32f4中添加SQLite packages,不能创建数据库
10
正点原子stm32f429阿波罗开发板上运行sqlite无法建表
推荐文章
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
RTduino物联网应用零基础入门
2
TinyUSB Demo运行教程
3
RT-Thread学习大礼包一键带走!
4
freemodbus从机调试说明
5
【1024】瑞萨 RA 系列 BSP 制作与适配最新版本的 Keil 、 RSC、固件,较新的 FSP
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
cubemx
PWM
flash
packages_软件包
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
C++_cpp
at_device
本月问答贡献
张世争
8
个答案
2
次被采纳
踩姑娘的小蘑菇
4
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
5
个答案
1
次被采纳
rv666
2
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
4
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部