0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在博途环境下载但不重新初始化数据块呢?

jf_61nrsJTz 来源:方正智芯 2023-11-10 09:25 次阅读

现场设备运行过程中有时候我们需要更改在线数据块的结构(比如增加一些变量),但是如果直接更改数据块并下载会导致其重新初始化。这意味着CPU会将数据块中变量的实际值用初始值替换,将会导致实际数据的丢失,甚至引起设备故障。一种变通的方法是:使用快照先将实际值保存到初始值,然后尽快修改下载。这种方法只适用于实际值短时间变化影响不大的情况。有没有一种方法既能更改在线数据块的结构,又不引起数据块重新初始化呢?答案是:有的。下面我来详细介绍下。本文包括如下几个主题:

结构性更改;

下载但不重新初始化的工作原理

重置预留存储区

1、结构性更改

默认情况下,数据块的结构性更改会导致其下载时重新初始化。

数据块的结构性更改包括:

①其中变量名称的更改;

②其中变量的增加或删除;

③其中变量保持特性的更改;

从上面描述来看,我们在数据块中增加变量属于结构性更改,怎样使其不重新初始化呢?这需要使用数据块的一个属性——预留存储区。

注①:初始值修改不属于结构性更改,因此下载时不会引起数据块重新初始化。

注②:这里的数据块既可以是全局数据块,也可以是函数块的背景数据块。

2、数据块下载但不重新初始化的工作原理

首先,只有“优化的块”才支持该功能。勾选“优化的块访问”属性的数据块或函数块默认有一个预留存储区,激活该预留区后,后续声明的变量/参数都存放在该区域中。

选中数据块,右键单击,选择【属性】菜单,可以看到“优化的块访问”选项,如下图所示:

5a9490c0-7f55-11ee-939d-92fbcf53809c.png

在上述属性对话框中,单击【下载但不重新初始化】。勾选【启用下载,但不重新初始化变量】便启用该功能。在【存储器预留区域】中设置预留存储区的大小,比如100字节;在【预留可保持型存储器】中设置保持型存储器的大小,如下图所示:

5aa72e7e-7f55-11ee-939d-92fbcf53809c.png

设置完成后单击【确定】,该数据块便有了设定大小的预留存储区,但尚未激活。在未激活的情况下,往数据块中添加的变量仍存放在默认存储区。如果进行了结构性更改,则下载时仍会提示需要重新初始化。

那么怎样激活呢?

打开数据块,在其上方有一个红色的、激活预留存储区的按钮,如下图所示:

5ab0e22a-7f55-11ee-939d-92fbcf53809c.png

单击该按钮会弹出一个对话框:

5ac3c7c8-7f55-11ee-939d-92fbcf53809c.png

单击【确定】后,再次往数据块中添加的变量,都存放在预留存储区中。此时下载不会再提示需要重新初始化。

3、重置预留存储区

随着变量的添加,预留存储区会越来越小。在【下载但不重新初始化】页面可以查看剩余的存储区字节数。若项目已经阶段性完成,可以在适当的时候将预留存储区的数据集成到常规存储区,以清空预留存储区便于后续使用。此时可以选中数据块并单击右键,在弹出的对话框中选择【编译】→【软件(复位存储器预留区域)】,如下图所示:

5ad404d0-7f55-11ee-939d-92fbcf53809c.png

系统会提示下载时需要重新初始化,单击【确定】,完成重置,此时预留存储区的可使用字节数恢复成设定值。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7148

    浏览量

    161986
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206560

原文标题:怎样在博途环境下载但不重新初始化数据块?

文章出处:【微信号:方正智芯,微信公众号:方正智芯】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F4重新初始化UART1,不能正常接收数据怎么解决?

    程序中UART1 一开始是正常接收数据,后面卸载UART1功能,将RX改成上升沿外部中断, 触发中断后 屏蔽外部中断,重新初始化UART1,但这时候不能正常接收数据。 伪代码如下
    发表于 03-25 07:07

    MCU重新上电后,如何进行ECC初始化

    如题,在重新上电之后,需要读取ram地址,读取时进入异常,查阅资料后发现是由于重新上电,需要进行ECC初始化,请问这该如何进行
    发表于 03-19 07:53

    字符型、指针型等变量等该如何初始化

     对于数值类型的变量往往初始化为0,但对于其他类型的变量,如字符型、指针型等变量等该如何初始化呢?
    的头像 发表于 03-18 11:02 208次阅读

    MCU单片机GPIO初始化该按什么顺序配置?为什么初始化时有电平跳变?

    GPIO初始化时有时钟配置、模式配置、输出配置、复用配置,那么在编写初始化代码时,到底该按什么顺序执行呢?如果顺序不当那初始化过程可能会出现短暂的电平跳变。
    的头像 发表于 02-22 11:07 385次阅读
    MCU单片机GPIO<b class='flag-5'>初始化</b>该按什么顺序配置?为什么<b class='flag-5'>初始化</b>时有电平跳变?

    西门子博途示例:在块上设置内存保留

    下表描述了如何为下载设置内存保留而不重新初始化
    的头像 发表于 01-15 10:42 223次阅读
    西门子博途示例:在块上设置内存保留

    LTC2943在初始化的时候要如何确定Qlsb的初始

    最近公司在使用一款LTC2943的库仑计,但是在初始化的时候要如何确定Qlsb的初始?或者可以提供一个STM32作为MCU的例程最好。
    发表于 01-04 06:47

    Itc250032初始化的时候DRL不变化,初始化一直失败的原因?

    初始化LTC250032时的波形如上图,图中DRL一直是低电平,按照数据手册提示,MCLK上升沿以后DRL也应该变为高电平,然后DRL下降沿开始写入数据。 当把PRE置为高电平以后,DRL 能够输出脉冲。 现在的问题是,
    发表于 12-05 06:40

    SD卡初始化及读取程序

    电子发烧友网站提供《SD卡初始化及读取程序.pdf》资料免费下载
    发表于 10-13 09:50 2次下载
    SD卡<b class='flag-5'>初始化</b>及读取程序

    求助,M0516关于时钟初始化的问题

    有几个问题如下1.因为SPI1口需要1.6M输出频率,我将晶振改为16M,系统会产生如何的变化? 2.为提高运行速度将CPU速度提高到48M需要进行如何的改动? 3.进行时钟频率重新设置后,
    发表于 08-24 08:16

    求助,MCU重新上电后如何进行ECC初始化?

    如题,在重新上电之后,需要读取ram地址,读取时进入异常,查阅资料后发现是由于重新上电,需要进行ECC初始化,请问这该如何进行?
    发表于 08-07 10:05

    带有初始化信号的0-9加/减计数器

    电子发烧友网站提供《带有初始化信号的0-9加/减计数器.zip》资料免费下载
    发表于 06-16 14:39 0次下载
    带有<b class='flag-5'>初始化</b>信号的0-9加/减计数器

    iMx6 CAN 未在启动时初始化是怎么回事?

    STOPPED 的事实告诉我这不是应用程序层中的问题。 关于导致启动时初始化失败并强制进入 STOPPED 状态的任何想法?或者可能如何“踢裤子”并让它再次运行而无需完全重启?
    发表于 06-09 06:25

    mcan驱动没有实现timestamp初始化步骤?

    ,我找到了 TSCC 寄存器声明,如下所示: 我尝试使用寄存器上的直接调用来设置时间戳,但没有成功。我总是将时间戳读为零。 我的问题是:mcan驱动没有实现timestamp初始化步骤? 在 MCU 中没有外部计时器/计数器的情况下,如
    发表于 06-08 07:56

    PyTorch教程6.4之惰性初始化

    电子发烧友网站提供《PyTorch教程6.4之惰性初始化.pdf》资料免费下载
    发表于 06-05 11:52 0次下载
    PyTorch教程6.4之惰性<b class='flag-5'>初始化</b>

    RAMFS初始化错误怎么解决

    RAMFS初始化错误 [E/DFS] There is no space to register this file system (ram).
    发表于 05-17 10:44