之前一直使用matlab2018a 通过matlab自带的函数 rtw.asap2SetAddress('File.a2l','File.elf')去提取matlab生成的A2L的地址 ,Simulink生成的A2L中,每个变量后会有一个占位符,帮助定位提取的地址要修改的位置,地址提取完成后 占位符会消失
在开发过程中发现
2019a以及2020a的版本在提取地址时会发生崩溃闪退
2020.11.26
通过更新了matlab 2020a的 update5解决了问题
Matlab update包地址:https://ww2.mathworks.cn/downloads/web_downloads/download_update_installers/R2019a
https://ww2.mathworks.cn/downloads/web_downloads/download_update_installers/R2020a
但是有个值得注意的点是:
若Simulink模型里用到了某个全局变量,生成C代码时,会将其放在内存.data段
若这个全局变量,在模型里定义了未使用,它仍然会体现在A2L里
但是IDE在编译SImulink生成的代码时,编译器会忽略这个全局变量,因为未使用
因此在MAP以及ELF中不会有该变量的地址
在2018a中,使用rtw.asap2SetAddress提取地址时会产生报错,因为找不到对应的变量的地址
此时,根据报错信息,在A2L中将未用到的全局变量的测量量描述和标定量描述删除就好了
然而在2020a中,不会提示报错,而是将空白A2L中的关于该变量的占位符删除
但此时,该变量的地址仍然是空白状态下的0x0000,若使用该A2L进行标定
有可能产生报错,因为该地址很可能不存在,这点需要自己根据实际情况,通过MAP文件找到未使用的全局变量,将其在A2L中的描述删除。