OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3293|回复: 9

片内Flash存储与的相关问题。

[复制链接]

11

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-1-6
在线时间
56 小时
发表于 2018-4-8 22:54:38 | 显示全部楼层 |阅读模式
1金钱
各位老师,我没弄清楚malloc动态内存分配 与 STM32103ZET6片内Flash存储有什么关系。
目前我在编写代码时,希望单片机每隔10分钟 将5个参数的值保存一次在Flash内,代码如下:
                        STMFLASH_Write(FLASH_SAVE_ADDR+10*ListNumber_count,(u16*)wendu,SIZE_t);
                        ListNumber_count++;
                        STMFLASH_Write(FLASH_SAVE_ADDR+20*ListNumber_count,(u16*)ppm_show,SIZE_ppm);
                        ListNumber_count++;
                        STMFLASH_Write(FLASH_SAVE_ADDR+30*ListNumber_count,(u16*)shidu,SIZE_ppms);
                        ListNumber_count++;
                        STMFLASH_Write(FLASH_SAVE_ADDR+40*ListNumber_count,(u16*)calendar_date,SIZE_date);
                        ListNumber_count++;
                        STMFLASH_Write(FLASH_SAVE_ADDR+50*ListNumber_count,(u16*)calendar_time,SIZE_time);
                        ListNumber_count++;

以上是保存一次的方式。但是这样通过ListNumber_count++太繁琐,并且内存分配必须固定是10字节,太痛苦了。
于是我想能不能使用malloc和free的方式自动去分配内存呢?
具体实现方式是什么样呢?谢谢。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-4-9 02:01:31 | 显示全部楼层
回复

使用道具 举报

37

主题

596

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1574
金钱
1574
注册时间
2017-7-17
在线时间
308 小时
发表于 2018-4-9 09:21:40 | 显示全部楼层
本帖最后由 candylife9 于 2018-4-9 09:22 编辑

malloc本来就是自动分配一个可用内存的。记住,是内存,不是FLASH。FLASH是不可写的,只能编程烧录。所以malloc和FLASH没有任何关系。
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-4-9 09:24:38 来自手机 | 显示全部楼层
你这16U的数据,flash地址每次加2就行,不用加10
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-4-9 09:25:18 来自手机 | 显示全部楼层
或者凑1024或2048长度数据一次写入一页
回复

使用道具 举报

11

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-1-6
在线时间
56 小时
 楼主| 发表于 2018-4-9 21:19:33 | 显示全部楼层

老师帮忙指点个方向吧,实在没搞明白自动分配内存是干什么用的。
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-4-9 22:39:08 | 显示全部楼层
假如不容易断电,就弄个大的数组,存满了再一次写吧,非要每次写,就把5个参数数据弄成结构体,一次写入吧,方便点
回复

使用道具 举报

11

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-1-6
在线时间
56 小时
 楼主| 发表于 2018-4-9 22:49:49 | 显示全部楼层
275891381 发表于 2018-4-9 22:39
假如不容易断电,就弄个大的数组,存满了再一次写吧,非要每次写,就把5个参数数据弄成结构体,一次写入吧 ...

是需要频繁断电的。结构体写入 跟 数组依次写入感觉没太大区别啊?
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-4-9 23:29:55 | 显示全部楼层
噼啪嘭 发表于 2018-4-9 22:49
是需要频繁断电的。结构体写入 跟 数组依次写入感觉没太大区别啊?

频繁断电,就怕数组定义的大了,还没存呢就没电了,不过这样可以用断电检测,加上后备电源或者大电容存点电,
结构体的好处是,结构体里面可以加上存在哪里的位置变量呀,程序直接处理就好了
回复

使用道具 举报

7

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2017-5-20
在线时间
96 小时
发表于 2018-4-10 15:09:04 | 显示全部楼层
内存是内存,flash不是内存。
希望单片机每隔10分钟 将5个参数的值保存一次在Flash内....
我非常不建议你这么做,Flash会坏的。
频繁断电,那就该使用纽扣电池,然后把数据写在备份寄存器。。
或者你要是真的不想用电池,也该保存在外置ROM里面。推荐铁电存储器(FRAM)
你的参数只是5个16位数,不多。可以使用sprintf()函数放入数组内。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 06:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表