本文介绍: 在一个嵌入式软件项目中,客户要求高度可控的时序流,我使用一个全局工步,对整个软件进行控制调度。由于子任务比较多,分门别类放在几个嵌套的子系统中,所以我使用了Data Store Memory模块。1、Data Store Memory模块的Write和Read并不完全按照先Write后Read的顺序执行。2、复杂项目中有多个Read模块时,他们之间并没有一定的执行顺序,需要开发者自行约束。

文章目录

背景

问题

排查

解决

总结


背景

        在一个嵌入式软件项目中,客户要求高度可控的时序流,我使用一个全局工步,对整个软件进行控制调度。由于子任务比较多,分门别类放在几个嵌套的子系统中,不能使用Goto模块引用步变量。

        所以我使用了Data Store Memory模块,工步变量既可以跨周期,也能跨Subsystem,包括层级嵌套等。Demo示例如下:

问题

        按照上述示例,预想两个子系统应该在同一个周期执行,并日根据Simulink数据流的执行顺序,输出值应该相等。但是实际执行情况如下:

排查

        从上述曲线上看,是Subsystem1的输出不对,所以给Subsystem1的相关信号都打上Scope。

发现Subsystem1的使能条件比信号过来的时间早了,示例如下:

        进一步排查,发现两个Data Store Read的值居然不同步,示例如下

        以上说明模块执行顺序有问题,打开Simulink的Sorted Execution Order,看到确实是有问题,示例如下:

解决

        调整模块的优先级,把Data Store Write的优先级提到最高,示例如下:

        重新运行程序,问题不再出现,Bug修复完工。示例如下:

总结

         1、Data Store Memory模块的Write和Read并不完全按照先Write后Read的顺序执行。

        2、复杂项目中有多个Read模块时,他们之间并没有一定的执行顺序,需要开发者自行约束。


        版权声明:原创文章,转载和引用请注明出处和链接,侵权必究!

        上述例程使用的Demo工程,可以到笔者的主页查找和下载。

原文地址:https://blog.csdn.net/CSSUST/article/details/135515680

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_54490.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注