完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友william hill官网
|
我正在尝试实现一种方法,用于恢复使用NVM的参数的默认校准值。例如,一个名为“myData”的参数被配置为使用存储在NVM中的数据。在软件中,默认值以值“3500”初始化……平台软件通过调用以下函数在启动时更新该参数的值……在这种情况下,在模拟EEPROM中将“myData”分配地址“32”。仿真EEPROM中的ress可能与软件中声明的默认初始化值“3500”不同。如果我想将默认初始化值“3500”恢复到参数“myData”,那么最好的方法是什么?值“3500”必须存储在闪存中的某个地方,并且处理器必须从闪存(ROM)检索值“3500”,并将其分配给位于数据存储器(RAM)中的参数“myData”。来自flash的'3500',或者甚至如何找到该值存储在flash中的地址。我可以用指针指向存储在flash中的默认初始化值'3500'的地址吗?如果是,该怎么办?在调用函数DataEERecallCalibration之前,我可以复制参数的默认初始化值并将其存储在数据存储器中。这样,在数据存储器中就有默认的初始化值的副本,尽管这看起来很愚蠢,因为它需要数据存储器来存储默认的初始化值(无论如何很少被检索),并且默认的初始化值必须已经存储在f中的某个地方。lash,这只是如何访问数据的问题。在闪存中,问题就在于如何访问数据。如果可能,我如何从闪存中检索默认的初始化值“3500”,以便将默认的初始化值“3500”恢复到参数“myData”?
|
|
相关推荐
18个回答
|
|
|
在启动程序时,可能需要执行诸如restoreDefaultVal.()之类的过程,可以调用restoreDefaultVal.()或DataEERecallCalibration()来初始化值。
|
|
|
|
|
|
感谢Timijkthe这个过程的问题是,它意味着将默认值保持在两个地方。即变量被声明和初始化,并且在函数RealeDebug值()中。如果有很多参数,这就更难了!此外,声明变量的代码是从Simulink自动生成的。可变的解释和初始化是自动编码的(即应用软件),但是所有模拟的EEPROM功能都是手工编码的(即平台软件)。因此,这意味着在自动生成的代码中搜索初始化值(其他用户可能会改变),并手动将初始化值复制到手动代码中。Flash,必须有一种方法重新初始化这些变量,而不必做重置?
|
|
|
|
|
|
为什么?在函数restoreDefaultVal.()中将其引用为ONCE,并在启动时或在任何时候使用它初始化变量。
|
|
|
|
|
|
为什么?在函数restoreDefaultVal.()中将其引用为ONCE,并在启动时或任何时候使用它初始化变量。另一种方法是将初始值与可更改的副本一起存储在EEPROM中。在Simulink。代码是从Simulink中自动生成的,它声明和初始化变量,即无符号int myData=3500;初始化值必须在Simulink中定义,不仅用于生成代码,而且用于运行模拟。e,应用软件的声明和初始化必须在Simulink中定义。
|
|
|
|
|
|
你使用什么编译器?可以在用户指南中搜索数据初始化。这可能会给你带来一些戏法。你可以在地图文件中看到它。调用C中的函数yDATAYIN()或如果不是,您可能需要了解如何使用程序集来完成它。你可以先试用模拟器。
|
|
|
|
|
|
感谢Timijk,我看一看:我正在使用XC16编译器为DSSPICEP256MU810。
|
|
|
|
|
|
我定义了三个配置/校准数据阵列。α1是ErOM(仿真)中的数据图像。2是从EORM卸载时的1的副本。α3是每个参数的默认值的数组。数组α3被声明为“const”以放置在程序Flash中。数组1和2在启动时从ErOM中加载。完整性检查。如果数据被认为是坏的,则可以加载默认值。在运行时不断地比较数组#1和#2,如果不同,则假定用户更改了参数,并且需要将其存储在EEROM中。当存储数据时,将更新副本。如果需要缺省值,则将数组#3复制到数组#1,更新过程将根据需要存储新的(缺省值)参数。
|
|
|
|
|
|
只是一些更新的数据。我对链接器文件做了一些修改,测试了以下代码。将下面的行添加到链接器文件0x2E4只是一个临时值,因为我不知道如何获得.dinit的值。我先放一个伪值,在第一次编译之后,我在映射文件中检查.dinit的值,然后再次更新链接器文件,然后执行另一个链接。斯特斯。一旦_data_init_.()完成,全局变量将被重置。如果优化级别不同,我不确定asm()中使用的W0、W1是否相同……
|
|
|
|
|
|
Init数据存储在Flash中,在启动时由编译器复制到RAM中。如果希望访问数据,不要使用编译器内置的初始化例程,而是使用自己的初始化例程——在flash中定位数据,并在启动时复制到RAM中。一切都是一样的,但是现在你可以随时访问你的数据。
|
|
|
|
|
|
感谢您尝试查看映射文件以找到_u DINIT的地址,并且工作寄存器将使构建软件变得繁琐和容易出错,但是这种方法的最大问题是,我只希望重置某些变量(即,使用校准数据的变量)。存储在NVM中的。我不希望所有的变量都被重置。看起来我正在尝试做一些比我意识到的更困难的事情,我可能只需要将默认值保存在NVM中。
|
|
|
|
|
|
|
|
|
是的,这会起作用。但我不知道如何或者甚至可以使用来自Simulink的自动生成代码那样的“类似”定义。生成的代码将具有语法...unsigned int myData=3500;我不知道是否可以让Simulink生成代码具有语法...unsigned int myData=MY_DATA_DEFAULT;
|
|
|
|
|
|
你能行吗?
|
|
|
|
|
|
我不知道您是否可以让Simulink使用常量自动生成代码(我希望您能够以某种方式这样做)。但是,据我所知,如果将变量声明为常量,那么在闪存中它永远不能改变为常量,因此在这种情况下,myData总是3500。可校准的,所以它需要在工作条件下在RAM中存储,但是存储在闪存中,以便当电源被移除时数据不会丢失。如果数据被改变,它将被写回到NVM在掉电。
|
|
|
|
|
|
你的另一个选择是
|
|
|
|
|
|
变量名和初始化值在Simulink中声明和定义。代码是从Simulink中自动生成的,它声明和初始化变量,即无符号int myData=3500;初始化值必须在Simulink中定义,不仅用于生成代码,而且用于运行模拟。e,应用软件的声明和初始化必须在Simulink中定义。
|
|
|
|
|
|
这不是你想要的吗?闪存中的变量您可以在开始时使用它来初始化其他变量,以后任何时候都可以访问它。通过使它成为你自己的,你可以随时访问它。你有什么:我的建议:
|
|
|
|
|
|
有很多方法来处理这个问题。这里的问题是Simulink会允许什么。他们有william hill官网
吗?另一方面,你需要两组init Values。或者你可以在代码改变之前收集它们。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
5248 浏览 9 评论
2036 浏览 8 评论
1956 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3218 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2264 浏览 5 评论
787浏览 1评论
678浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
604浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
685浏览 0评论
582浏览 0评论
/7
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 16:23 , Processed in 1.794092 second(s), Total 110, Slave 94 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
231