打印
[AVR单片机]

AVR flash问题

[复制链接]
2350|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大头BB|  楼主 | 2014-7-31 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
huangxz| | 2014-7-31 15:51 | 只看该作者
avr支持iap的,有没有库函数根据你的开发环境决定,跟芯片本身没有关系

使用特权

评论回复
板凳
大头BB|  楼主 | 2014-7-31 17:28 | 只看该作者
huangxz 发表于 2014-7-31 15:51
avr支持iap的,有没有库函数根据你的开发环境决定,跟芯片本身没有关系

iap是要进入到boot区,我想问是不是就是不能再程序执行时写入数据到flash中,eeprom可以在程序执行时写入。谢谢

使用特权

评论回复
地板
huangxz| | 2014-7-31 17:35 | 只看该作者
大头BB 发表于 2014-7-31 17:28
iap是要进入到boot区,我想问是不是就是不能再程序执行时写入数据到flash中,eeprom可以在程序执行时写入 ...

iap 就是在程序执行时写入的

使用特权

评论回复
5
大头BB|  楼主 | 2014-7-31 18:25 | 只看该作者
huangxz 发表于 2014-7-31 17:35
iap 就是在程序执行时写入的

iap时候要擦除flash,那原来的程序不就没有了吗?我的意思是例如能不能在程序执行某个函数的时候对flah进行读写,存放一些变量值,然后继续执行这个函数

使用特权

评论回复
6
大头BB|  楼主 | 2014-7-31 18:44 | 只看该作者
huangxz 发表于 2014-7-31 17:35
iap 就是在程序执行时写入的

还有个问题,attiny841是不支持boot loader,那是一个怎么样的情况

使用特权

评论回复
7
qq4988| | 2014-7-31 20:28 | 只看该作者
实在不行,就加一块EEPROM吧,没风个钱

使用特权

评论回复
8
huangxz| | 2014-7-31 20:52 | 只看该作者
大头BB 发表于 2014-7-31 18:25
iap时候要擦除flash,那原来的程序不就没有了吗?我的意思是例如能不能在程序执行某个函数的时候对flah进 ...

flash擦除是分块的,不是一次全部擦除的

使用特权

评论回复
9
大头BB|  楼主 | 2014-8-1 09:02 | 只看该作者
huangxz 发表于 2014-7-31 20:52
flash擦除是分块的,不是一次全部擦除的

在擦除的时候能同时对其它块进行读吗?如果不能的话程序就没法运行了,有个问题,怎么看程序存放的地址和设置程序启动位置

使用特权

评论回复
10
huangxz| | 2014-8-1 09:53 | 只看该作者
大头BB 发表于 2014-8-1 09:02
在擦除的时候能同时对其它块进行读吗?如果不能的话程序就没法运行了,有个问题,怎么看程序存放的地址和 ...

那肯定是可以 的,因为擦除的操作就是在flash  中运行的程序的

使用特权

评论回复
11
大头BB|  楼主 | 2014-8-1 10:30 | 只看该作者
qq4988 发表于 2014-7-31 20:28
实在不行,就加一块EEPROM吧,没风个钱

因为有些芯片没有eeprom,我可能就保存一些初始化的ID信息,为了几个字节买个eeprom不值

使用特权

评论回复
12
qq4988| | 2014-8-1 10:42 | 只看该作者
大头BB 发表于 2014-8-1 10:30
因为有些芯片没有eeprom,我可能就保存一些初始化的ID信息,为了几个字节买个eeprom不值 ...

还有一个办法,如果你有个位数占一个字节的,可以合并起来用BCD码组合成一个字节,可以节省空间,比如两个字节,.0x04与0x02是两个参数,你可以组合成0X42,这样两个字节变成一个字节,节省空间

使用特权

评论回复
13
大头BB|  楼主 | 2014-8-1 10:57 | 只看该作者
huangxz 发表于 2014-8-1 09:53
那肯定是可以 的,因为擦除的操作就是在flash  中运行的程序的

flash编译器编程时候地址分配是顺序来还是随机的,怎么擦看,譬如说我想分配0xff0的地址给我自己定义的参数,怎么确定编译器没有把这个地址分配给了其他参数,因为我一擦除就是4页flash,怎么确定这4页flash没有被分配

使用特权

评论回复
14
大头BB|  楼主 | 2014-8-1 11:02 | 只看该作者
qq4988 发表于 2014-8-1 10:42
还有一个办法,如果你有个位数占一个字节的,可以合并起来用BCD码组合成一个字节,可以节省空间,比如两 ...

现在不是空间不足的问题了,现在是没有eeprom的情况怎么把数据存到flash中,看手册flash的地址分配很乱,而且我查看hex文件地址也看到一头雾水

使用特权

评论回复
15
qq4988| | 2014-8-1 11:09 | 只看该作者
你是用的哪个芯片?具体型号

使用特权

评论回复
16
大头BB|  楼主 | 2014-8-1 12:55 | 只看该作者
qq4988 发表于 2014-8-1 11:09
你是用的哪个芯片?具体型号

attiny841,这个是有eeprom,但是公司以后可能会用没有eeprom的,老板要求这么干,我只能试试看了

使用特权

评论回复
17
大头BB|  楼主 | 2014-8-1 15:19 | 只看该作者
huangxz 发表于 2014-8-1 09:53
那肯定是可以 的,因为擦除的操作就是在flash  中运行的程序的

解决了,直接像IAP那样操作flash,不过带来的问题就是你不知道操作那个地址是否有写入有代码或者数据,现在就设置启动位置空出一个空间来存放数据。

使用特权

评论回复
18
大头BB|  楼主 | 2014-8-1 15:19 | 只看该作者
huangxz 发表于 2014-8-1 09:53
那肯定是可以 的,因为擦除的操作就是在flash  中运行的程序的

解决了,直接像IAP那样操作flash,不过带来的问题就是你不知道操作那个地址是否有写入有代码或者数据,现在就设置启动位置空出一个空间来存放数据。

使用特权

评论回复
19
huangxz| | 2014-8-1 15:25 | 只看该作者
大头BB 发表于 2014-8-1 10:57
flash编译器编程时候地址分配是顺序来还是随机的,怎么擦看,譬如说我想分配0xff0的地址给我自己定义的参 ...

一般来说,这个位置是自己确定程序不能到的空间才可以,比如m32里面有32k的flash, 你一个block有4k,那么你的程序就不能大于28k,

使用特权

评论回复
20
大头BB|  楼主 | 2014-8-1 15:57 | 只看该作者
huangxz 发表于 2014-8-1 15:25
一般来说,这个位置是自己确定程序不能到的空间才可以,比如m32里面有32k的flash, 你一个block有4k,那么你 ...

嗯嗯,还有个问题,你知不知flash的操作电压是多少,我在手册找不到。因为设计到低功耗设计,我想知道当电压最低到那里时候flash还可以进行读写

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

77

帖子

0

粉丝