Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kernel
使用ali-MQTT和memheap出错
发布于 2019-05-15 15:28:32 浏览:1646
订阅该版
由于ali-mqtt的内存资源太大,我扩展了SRAM. 在正点原子的F4开发板上实现了memheap功能, 把内部的128K和外部的1M SRAM连在一起使用. 出现rt_memheap_free的断言,具体如下: msh />mqtt [inf] _ssl_client_init(175): Loading the CA root certificate ... cert. version : 3 serial number : 04:00:00:00:00:01:15:4B:5A:C3:94 issuer name : C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA subject name : C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA issued on : 1998-09-01 12:00:00 expires on : 2028-01-28 12:00:00 signed using : RSA with SHA1 RSA key size : 2048 bits basic constraints : CA=true key usage : Key Cert Sign, CRL Sign [inf] _ssl_parse_crt(143): crt content:451 [inf] _ssl_client_init(183): ok (0 skipped) [inf] _TLSConnectNetwork(345): Connecting to /a16GIDKCWl8.iot-as-mqtt.cn-shanghai.aliyuncs.com/1883... msh />[inf] _TLSConnectNetwork(359): ok [inf] _TLSConnectNetwork(364): . Setting up the SSL/TLS structure... [inf] _TLSConnectNetwork(374): ok [inf] _TLSConnectNetwork(409): Performing the SSL/TLS handshake... ((header_ptr->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC) assertion failed at function:rt_memheap_free, line number:515 之前使用mem的时候,没有此问题. 由于这个问题跟踪比较麻烦, 还请哪位高手指点下. 目前我已经确认FSMC的初始化应该没有问题, 我自己也用代码测试过读写,完全正确, 具体初始化代码如下: void EXT_SRAM_Configuration(void) { /* FSMC GPIO configure */ { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_FSMC_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_FSMC; GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_10; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); } FSMC_NORSRAM_TimingTypeDef RWTiming; RWTiming.AddressSetupTime = 0x00; /* 地址建立时间(ADDSET)为1个HCLK 1/36M=27ns */ RWTiming.AddressHoldTime = 0x00; /* 地址保持时间(ADDHLD)模式A未用到 */ RWTiming.DataSetupTime = 0x08; /* 数据保持时间(DATAST)为9个HCLK 6*9=54ns */ RWTiming.BusTurnAroundDuration = 0x00; RWTiming.CLKDivision = 0x00; RWTiming.DataLatency = 0x00; RWTiming.AccessMode = FSMC_ACCESS_MODE_A; /* 模式A */ SRAM_HandleTypeDef FSMC_SRAMInitStruct; FSMC_SRAMInitStruct.Instance = FSMC_NORSRAM_DEVICE; //BANK1 FSMC_SRAMInitStruct.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; //选择 BWTR 未用到 FSMC_SRAMInitStruct.Init.NSBank = FSMC_NORSRAM_BANK3; // 这里我们使用NE3 ,也就对应BTCR[4],[5]。 FSMC_SRAMInitStruct.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; FSMC_SRAMInitStruct.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; //SRAM FSMC_SRAMInitStruct.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16; //存储器数据宽度为16bit FSMC_SRAMInitStruct.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; // FSMC_BURST_ACCESS_MODE_DISABLE; FSMC_SRAMInitStruct.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; // FSMC_SRAMInitStruct.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; //FSMC_ASYNCHRONOUS_WAIT_DISABLE FSMC_SRAMInitStruct.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; //FSMC_WRAP_MODE_DISABLE FSMC_SRAMInitStruct.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; //FSMC_WAIT_TIMING_BEFORE_WS FSMC_SRAMInitStruct.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; //存储器写使能 FSMC_SRAMInitStruct.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; //FSMC_WAIT_SIGNAL_DISABLE FSMC_SRAMInitStruct.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE; // 读写使用相同的时序 FSMC_SRAMInitStruct.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE; //FSMC_WRITE_BURST_DISABLE FSMC_SRAMInitStruct.Init.ContinuousClock = FSMC_CONTINUOUS_CLOCK_SYNC_ONLY; //连续时钟使能关闭 FSMC_SRAMInitStruct.Init.PageSize = FSMC_PAGE_SIZE_NONE; //现需页大小,默认0 HAL_SRAM_Init(&FSMC_SRAMInitStruct, &RWTiming, &RWTiming); } #if defined(RT_USING_MEMHEAP) && defined(RT_USING_MEMHEAP_AS_HEAP) static struct rt_memheap sram_heap; #endif /** * This function will initial STM32 board. */ void rt_hw_board_init() { /* Configure the system clock @ 84 Mhz */ SystemClock_Config(); HAL_Init(); #if defined(RT_USING_MEMHEAP) && defined(RT_USING_MEMHEAP_AS_HEAP) EXT_SRAM_Configuration(); rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); rt_memheap_init(&sram_heap, "sram2", (void *)(0x68000000), 1024 * 1024); #else rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); #endif #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif #ifdef RT_USING_CONSOLE rt_console_set_device(RT_CONSOLE_DEVICE_NAME); #endif }
查看更多
2
个回答
默认排序
按发布时间排序
Spunky
2019-05-15
这家伙很懒,什么也没写!
刚刚使用内部CCM代替外部SRAM, 一切正常. 应该不是memheap的问题. 但是单独读写SRAM又没有问题. 这个问题比较纠结了.
Spunky
2019-05-16
这家伙很懒,什么也没写!
我找到问题了, 我用的正点F4开发板平时都是把液晶显示器插在上面, 而引脚初始化代码里面没有初始化FSMC_NE4, 造成TFTLCD 处于不定状态, 干扰了SRAM的正常时序. 我艹, 真的是太坑了. 整了我两天时间.
撰写答案
登录
注册新账号
关注者
0
被浏览
1.6k
关于作者
Spunky
这家伙很懒,什么也没写!
提问
19
回答
98
被采纳
0
关注TA
发私信
相关问题
1
请教cpu使用率分析
2
选择FreeRTOS, 还是RT-Thread。
3
thread heap stack overflow ?
4
rtt消息队列delay问题
5
释放被删除线程的内存地方在哪里啊
6
请教:各线程结束后,释放其中的内存的连续性问题
7
STM32F103中断关于信号量、邮箱问题
8
RTT中的线程栈大小如何控制
9
关于线程由执行态变为挂起态的代码实现,,,
10
rt_malloc(rt_size_t size)内存分配函数最小分配尺寸问题
推荐文章
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
组件 lwip v2.0.3 版本使用 netdev网卡的 ping 功能
2
简单两步配置RTT源码阅读环境 vsc+clangd
3
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
4
LVGL使用字库IC芯片显示中文
5
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
热门标签
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
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
807
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部