基于F28335的Simulink代码生成系列文章目录
基于F28335的Simulink代码生成(一)——搞懂模型的运行逻辑
基于F28335的Simulink代码生成(二)——EPWM模块同步设置问题
基于F28335的Simulink代码生成(三)——EQEP模块获取光电编码器的速度与角度信息
基于F28335的Simulink代码生成(四)——如何链接可以访问底层文件的外部源文件和头文件
基于F28335的Simulink代码生成(五)——DMA的使用
基于F28335的Simulink代码生成(六)——如何修改变量的存储类型
基于F28335的Simulink代码生成(七)——成果展示
前言
最近由于一下项目有幸得到一些资料,从而能给我机会快速熟悉快速原型这个玩意儿。这东西说实话确实比工程代码来的方便,但是这仅限于简单一些的工程,另外的话就是对于初学者相对友好,不需要非常深入寄存器的一些知识以及写代码的一些技巧。不过我目前做的一些东西反而让我觉得快速原型并不好用,因为因为他的运行逻辑更像是并行的,而不会像代码中那样从上往下写的串行逻辑。而且模型能实现的东西很有限,为了实现一些模型做不了的事情,必须对寄存器以及代码的东西很熟悉才行。
快速原型
与我们传统的工程代码编写相比,快速原型的优势我也不再赘述了,我主要来描述下我的需求和问题。目前需要实现在主函数中进行端口的初始化以及相关函数的基本操作。但是他模型的最外层界面就是一个中断,可以设置为timer0中断或者其他ADC中断等。那我要如何进行上述的初始化呢?
模型之外的方法
上面提到的问题值得深思,因为如果是在timer0中断里进行初始化显然会重复初始化而产生问题。那么怎么办呢?
在模型中,可以设置不同的模块,入ADC、PWM等等,他们的初始化操作显然是在main函数中执行的,那么必然有其他的方法可以实现将代码添加进主函数中执行。因此我进行了尝试之后发现了解决办法并进行了一些对比。
上面的四个模块分别应写入不同的内容,其中System Initialize里的内容就是放在主函数中运行的,而System Output的内容是作为输出功能依旧在timer0(或者ADC中断,看你设置)中。另外值得说明的就是Model Source和Model Header了,前者一般做一些define或者变量赋值的操作(其代码部分是放在在该模型函数中的,不是在模型中断中,具体在c文件的头部还是尾部可以选择,如下图所示,我模型的名字就是VVVF),后者一般是结构体定义或者变量定义的操作,具体也可以自己尝试,与工程代码中应该有些类似。
综上 就大概解决了我对上面逻辑的一些困惑。另外在模型中定义全局变量也是没问题的,是放在,h文件的结构体中的。中断的话可以单独拿出来看,并不和在模型哪个位置产生冲突。