Cortex M4中的应用和固件分离

时间:2014-05-30 16:29:34

标签: c embedded stm32 cortex-m3

我忙于一个大型项目,我需要为汽车控制系统编写软件。这是我正在使用的:

  1. 我使用STM32F4作为微型
  2. 我正在Matlab Simulink中编写应用程序(控制应用程序)。然后我从Matlab生成Cortex M4优化代码,我只是简单地包含在我的Keil uVision项目中。 (像魅力一样工作)
  3. 我手动为驱动程序层编写软件并与硬件抽象层接口。
  4. 我想保持我的Simulink生成代码与我的固件之间的分离'亲手写的代码。基本上,我希望能够在不影响我的控制应用程序的情况下更改固件。

    我想使用配置文件来映射Matlab Simulink使用我的硬件寄存器生成的变量(例如,用于GPIO)。我想通过配置文件(例如通过xml文件)来完成此操作。

    有没有人做过这样的事情,甚至可能。我正在寻找一种不占用大量内存的优雅解决方案。

    非常感谢!

    PS:是否可以根据存储在.xml或.txt文件中的变量名称在代码中声明变量。

    因此,如果在.txt文件中我有" Pressure_Sensor = 0",是否可以使用宏定义在代码中声明变量:Pressure_Sensor = 0;

2 个答案:

答案 0 :(得分:0)

如果你想在你的c项目构建中将变量包含在另一种文件类型的语法中,无论是.xml还是.txt文件,还有几种方法可以做到。如果您要将变量保存在c兼容的声明样式中,如:

int Pressure_Sensor = 0;

并且该文件中没有其他无效语义,您始终可以将该文件包含在其中一个编译单元中。文件的扩展名无关紧要。 #include指令实际上只是将该文件插入到位。

如果您要按照非c兼容语言(如XML)执行某些操作,那么生成并将这些变量包含到构建中的标准方法是让运行的脚本为pre -build操作,解析该.xml文件,然后生成包含在其中一个编译单元中的c兼容包含文件。使用它的最常见的事情之一是你可以找到许多例子,用于在构建中生成版本/构建信息。

答案 1 :(得分:0)

你可以这样做:

简化问题陈述是: 您想通过代码修改CPU端口寄存器,但您不知道该端口寄存器的地址(端口地址可能会在外部更改)。

解决方案是: I)在你的代码中:

让您的程序假设端口寄存器的地址位于固定位置,例如0x1000。 某人/某事会将端口寄存器的地址写入0x1000(您的程序不关心如何) 因此,要更改引脚K1,您必须更改0x1000处的地址值。 可是等等 , 你只想改变一个端口引脚,你不知道是哪个, 假设引脚位模式为0x1004

使引脚写入: 0x1000处的地址值| = 0x1002处的值 要使引脚OFF写: 地址的值在0x1000& =〜值为0x1002

最Imp: 以某种方式在程序中保留这些位置,以便编译器不在那里编写代码。

II)代码外:  解释假设:端口1地址:0xF000                               端口2地址:0xF001  现在有一个Excel宏或以下做的事情:  假设您想要port2的第8个引脚用于接触器K1,那么该宏应生成一个简单的文本文件:" F00180"。  现在在编译器输出格式上使用bin2hex或bin2mot(基于),并将此记事本文件转换为.hex或.mot(S-record)格式。  您必须将地址位置指定为0x1000作为这些实用程序的输入之一。

现在从生成的.hex文件中删除页眉,页脚行,并将剩余数据合并到program.hex文件中。

您已完成此操作,请通过合适的闪存编程器将.hex文件刻录到目标文件中。