Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
rt_thread下esayflash移植问题
发布于 2018-08-12 11:28:50 浏览:3866
订阅该版
最近几天又继续在资源少的可怜的stm32f003k6t6移植easyflash。在rt_thread下,easyflash的接口部分又使用了fal。 1、fal_flash.c,fal_partion.c下,多出变量定义写到了执行语句后,在MDK下是编译不通过的。    2、  fal_partion.c第165行 table_item_size = sizeof(struct fal_partition);执行后table_item_size =0x8000000, 后面申请table_item_size 的内存,肯定会内存不足,所以打印: [31;22m[E/FAL] (fal_partition_init:169) Initialize failed! No memory for table buffer.[0m  查看fal_partition定义:  #define FAL_DEV_NAME_MAX 24 这长度也就24+24+4+4+1怎么会有0x8000000这么大,日了鬼了。
查看更多
10
个回答
默认排序
按发布时间排序
armink
2018-08-12
这家伙很懒,什么也没写!
1、开启 C99 即可 2、你看下对应的汇编代码,分析下
camelback5
2018-08-12
这家伙很懒,什么也没写!
>1、开启 C99 即可 >2、你看下对应的汇编代码,分析下 --- 1、第一个问题是C99没有开启的缘故。 2,table_item_size的值没有问题,有点粗心了,进入调试,单步走了一步看到table_item_size 的值是0x8000000,C界面调试指针指向下一行就当执行完成了,其实汇编只走了一句,后面还两行没跑,跑完table_item_size的值是正确的0x40。 3,如此的话就是内存分配出了问题。目前我使用的单片机是stm32f030k6t6,sram只有4K,我先研究下具体内存占用情况。不行再改用大点内存的测试。 多谢天龙哥赐教
camelback5
2018-08-14
这家伙很懒,什么也没写!
>1、开启 C99 即可 >2、你看下对应的汇编代码,分析下 --- 天龙哥您好,继续移植过程还是有很多问题,也有很多地方看不太懂。 1、fal_partition.c中FAL_PART_MAGIC_WROD是做什么的,fal_partition_init 函数中读出分区内容与FAL_PART_MAGIC_WROD比较,但不知道FAL_PART_MAGIC_WROD 是什么时候写进,否则怎么会存在FAL_PART_MAGIC_WROD。因为读不出FAL_PART_MAGIC_WROD 所以后面的执行都是错误。 2、FAL_PART_TABLE_END_OFFSET是做什么,查找FAL_PART_MAGIC_WROD时,是从每个分区的 FAL_PART_TABLE_END_OFFSET处向前查找。
armink
2018-08-15
这家伙很懒,什么也没写!
>天龙哥您好,继续移植过程还是有很多问题,也有很多地方看不太懂。 >1、fal_partition.c中FAL_PART_MAGIC_ ... --- 1、MAGIC_WORD 存在分区表中的,你定义的分区表的时候就写入了。 2、这个地址在首页文档上有详细介绍,你看下不清白的再留言哈[attach]5298[/attach]
camelback5
2018-08-16
这家伙很懒,什么也没写!
>1、MAGIC_WORD 存在分区表中的,你定义的分区表的时候就写入了。 >2、这个地址在首页文档上有详细介绍,你 ... --- 您好,天龙哥: 开始是在码云gitee上看的,所以没看到那么多内容。您发的是github上的,上面更全面一些。 1、关于FAL_PART_TABLE_END_OFFSET 这个地址可以设置足够大,让程序检索整个分区。检索进去每次读取4字节与FAL_PART_MAGIC_WROD 比较。所以FAL_PART_TABLE_END_OFFSET最大可以总大小-5; 2、关于示例fal_flash_stm32f2_port的read函数,我移植到m0是直接复制修改的这个文件。 static int read(long offset, uint8_t *buf, size_t size) { uint32_t addr = stm32f0_onchip_flash.addr + offset; for (; size > 0; size -= 1, addr += 1, buf++) { *buf = *(uint8_t *) addr; } return size; } 这样返回的肯定是0。 可是我们在到fal_partition_init函数里面,看查找分区表那里。 /* find partition table location */ while (part_table_offset >= 0) { if (flash_dev->ops.read(part_table_offset, (uint8_t *) &read_magic_word, sizeof(read_magic_word)) > 0) { if (read_magic_word == ((FAL_PART_MAGIC_WROD_H << 16) + FAL_PART_MAGIC_WROD_L)) { part_table_find_ok = 1; break; } } else { break; } part_table_offset --; } 可以看到根本就直接退出了。我硬性把返回值改为1,继续调试,因为读出都写在buf里面了,返回值什么的没有意义的, 如果读越位,直接就进HardFault_Handler了。 3、这样我查找了整个分区还是没有找到FAL_PART_MAGIC_WROD,你说在定义的时候就写入,还看源码,定义这些只有一处 就是在fal_cfg.h定义的分区表。此时此刻才发现根本就没定义。因为配置的时候[ ] FAL partition table config has defined on 'fal_cfg.h' 这个选项没有勾选。 /* ====================== Partition Configuration ========================== */ #ifdef FAL_PART_HAS_TABLE_CFG /* partition table */ #define FAL_PART_TABLE \ { \ {FAL_PART_MAGIC_WROD, "app", "stm32f0_onchip_flash", 0, 31*1024, 0}, \ {FAL_PART_MAGIC_WROD, "data", "stm32f0_onchip_flash", 31*1024, 1024, 0}, \ } #endif /* FAL_PART_HAS_TABLE_CFG */ 所以此处定义无效。勾选后fal正常了,easyflash还有错误,明天再看,困了,不是因为突然发现FAL_PART_HAS_TABLE_CFG没定义 我就不弄到现在了。 [attach]5348[/attach] 明天继续,革命尚未成功,不过感觉快了,真不容易:L
armink
2018-08-16
这家伙很懒,什么也没写!
>这个地址可以设置足够大,让程序检索整个分区 --- 分区表检索的位置是基于 Flash 的地址范围,不是分区的地址范围哦
armink
2018-08-16
这家伙很懒,什么也没写!
对了,这块的文档有没有看过 [https://github.com/RT-Thread-packages/fal/tree/master/samples/porting](https://github.com/RT-Thread-packages/fal/tree/master/samples/porting)
camelback5
2018-08-16
这家伙很懒,什么也没写!
>对了,这块的文档有没有看过 >https://github.com/RT-Thread-packages/fal/tree/master/samples/porting ... --- 您好:1、文档看了,FAL_PART_TABLE_END_OFFSET的定义是我表述的问题,本身理解没错。 2、您看下fal的port里面的内部flash示例fal_flash_stm32f2_port的read函数应该是错了。 返回size为0。 多谢这几次的耐心解答,fal现在运行正确,easyflash调起来问题不大。
armink
2018-08-16
这家伙很懒,什么也没写!
>您好:1、文档看了,FAL_PART_TABLE_END_OFFSET的定义是我表述的问题,本身理解没错。 >2、您看下fal的por ... --- 好的,欢迎给 fal 提个 pr 哈。:D
camelback5
2018-08-16
这家伙很懒,什么也没写!
>好的,欢迎给 fal 提个 pr 哈。 --- 一定一定,等这两天学习完成,不过吐槽一下github真卡,不到万不得已真心不想进去。更不要谈拉取提交了,所以都在gitee里面晃悠。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.9k
关于作者
camelback5
这家伙很懒,什么也没写!
提问
4
回答
12
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
STM32内存扩展,SRAM-RMC
2
基于RT-Thread的STM32F4开发第八讲——SPI(普通、DMA、SFUD)
3
artpi2的drv-eth修改使用eth与设备驱动学习笔记
4
【面向零基础】基于星火1号开发板从头学习基于RT-Thread的嵌入式开发 第一讲
5
新版OneNet的星火1号开发板例程适配(下)
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
Bootloader
AT
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ota在线升级
ESP8266
WIZnet_W5500
BSP
PWM
packages_软件包
flash
freemodbus
潘多拉开发板_Pandora
GD32
ADC
定时器
编译报错
flashDB
keil_MDK
socket
rt_mq_消息队列_msg_queue
ulog
中断
Debug
SFUD
msh
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
xiaorui
4
个答案
1
次被采纳
tjrong
2
个答案
1
次被采纳
yans
2
个答案
1
次被采纳
alight
2
个答案
1
次被采纳
本月文章贡献
Pai同学
9
篇文章
12
次点赞
Rick98
3
篇文章
11
次点赞
RTT_逍遥
2
篇文章
10
次点赞
WenShan
2
篇文章
1
次点赞
加缪
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部