我正忙碌一个大型项目,我需要为汽车的控制系统编写软件。下面是我正在使用的:
1.我用STM32 F4做微处理器
1.我写的应用程序(控制应用程序)在Matlab Simulink。然后,我从Matlab生成Cortex M4优化代码,我只是将其包含在我的Keil uVision项目中。(像一个魅力)
1.我手工编写驱动层的软件和硬件抽象层的接口。
我想保持我的Simulink生成的代码和我的'固件'手写的代码之间的分离。本质上,我希望能够改变固件,而不影响我的控制应用程序。
我想使用一个配置文件来MapMatlab Simulink用我的硬件寄存器生成的变量(例如GPIO)。我想通过一个配置文件(例如:经由XML文件)。
有没有人做过这样的事情,这是可能的。我正在寻找一个优雅的解决方案,不消耗大量的RAM。
非常感谢!
PS:是否可以根据存储在.xml或.txt文件中的变量名在代码中声明变量。
因此,如果在.txt文件中我有“Pressure_Sensor = 0”,是否可以使用宏定义在代码中声明一个变量:Pressure_Sensor = 0;
2条答案
按热度按时间3duebb1j1#
如果您想在
c
项目中包含变量,那么可以从另一种类型的文件(无论是.xml还是.txt文件)中的语法来构建,有两种方法可以做到这一点。如果你要用c
兼容的声明风格来保存变量,比如:字符串
并且该文件中不会有其他无效的语义,您可以始终将该文件包含到您的一个编译单元中。文件的扩展名无关紧要。
#include
指令实际上只是将该文件插入到位。如果你要做一些非
c
兼容语言的事情,比如XML,生成这些变量并将其包含到构建中的标准方法是使用一个脚本,该脚本作为预构建操作运行,该脚本解析该.xml文件,然后生成一个c
兼容的包含文件,并将其包含到一个编译单元中。最常见的一个用途是在构建中生成版本/构建信息,你可以找到很多这样的例子。mtb9vblg2#
你可以这样做:
简化的问题陈述为:您想通过代码修改CPU端口寄存器,但不知道该端口寄存器的地址(端口地址可能会在外部更改)。
解决方案是:I)在你的代码中:
让你的程序假设端口寄存器的地址在固定的位置,比如0x 1000。有人/东西会把端口寄存器的地址写在0x 1000(你的程序不在乎如何)所以要改变引脚K1,你必须改变0x 1000的地址值。但是等等,您只想更改单个端口引脚,但您不知道是哪个,因此,假设引脚位模式为0x 1004
要使引脚ON写入:地址值为0x 1000| = 0x 1002处的值要使引脚OFF写入:0x 1000处的地址值&= ~ 0x 1002处的值
在你的程序中保留这些位置,这样编译器就不会在那里写代码。
二、代码外:解释假设:端口1地址:0xF 000端口2地址:0xF 001现在有一个Excel宏或其他东西要执行以下操作:假设你想要端口2的第8个引脚用于接触器K1,那么宏应该生成一个简单的文本文件:“F00180”。现在使用bin 2 hex或bin 2 mot(基于)编译器输出格式,并将此记事本文件转换为.hex或.mot(S记录)格式。您必须将地址位置指定为0x 1000,作为这些实用程序的输入之一。
现在从生成的.hex文件中删除页眉,页脚行,并将剩余的数据合并到您的程序.hex文件中。
你在这里做,烧伤.十六进制文件到目标由合适的闪存编程器.