imb*_*arr 5 code-generation freemarker stm32
我正在使用STM32CubeMX并尝试使用所用外围设备表生成自定义代码 (UM1718 第 141 页) 。在闪存中很容易拥有常量表,其中包含按预期用途分组的外围句柄和实例。例如这个头文件:
一些.h:
/* TIM table */
#define EM_TIM1 0 // index
#define EM_TIM6 1
#define TIM_CNT 2 // count
#define TIM_0_INST TIM1 // table of instaces
#define TIM_1_INST TIM6
extern TIM_HandleTypeDef htim1; // table of handles
extern TIM_HandleTypeDef htim6;
#define TIM_0_HNDL htim1 // table of handles
#define TIM_1_HNDL htim6
struct tim_tab_s {
TIM_TypeDef * inst;
TIM_HandleTypeDef * hndl;
};
extern struct tim_tab_s const tim_tab[TIM_CNT];
Run Code Online (Sandbox Code Playgroud)
我已经使用此自定义模板生成:
一些_h.ftl:
[#ftl]
[#list configs as dt]
[#assign data = dt]
[#assign peripheralParams =dt.peripheralParams]
[#assign peripheralGPIOParams =dt.peripheralGPIOParams]
[#assign peripheralDMAParams =dt.peripheralDMAParams]
[#assign peripheralNVICParams =dt.peripheralNVICParams]
[#assign usedIPs =dt.usedIPs]
[#assign ip_pref = "EM_"]
[#-- ip desrcibe grpName varName instType hndlType --]
[#assign ip_tim =["TIM", "htim", "TIM_TypeDef", "TIM_HandleTypeDef" ]]
[#assign ip_grps = [ip_tim]]
[#list ip_grps as ip_group]
[#assign ip_grp = ip_group[0]]
[#assign ip_var = ip_group[1]]
[#assign ip_instType = ip_group[2]]
[#assign ip_hndlType = ip_group[3]]
/* ${ip_grp} table */
[#assign ip_id = 0] [#-- IPs Index --]
[#list usedIPs as ip]
[#if peripheralParams.get(ip).entrySet()?size>0&&ip?contains(ip_grp)]
#define ${ip_pref}${ip} ${ip_id}[#if ip_id == 0] // index[/#if]
[#assign ip_id = ip_id + 1]
[/#if]
[/#list][#-- list IPs --]
#n
#define ${ip_grp}_CNT ${ip_id} // count
#n
[#assign ip_id = 0] [#-- IPs Instaces --]
[#list usedIPs as ip]
[#if peripheralParams.get(ip).entrySet()?size>0&&ip?contains(ip_grp)]
#define ${ip_grp}_${ip_id}_INST ${ip}[#if ip_id == 0] // table of instaces[/#if]
[#assign ip_id = ip_id + 1]
[/#if]
[/#list][#-- list IPs --]
#n
[#assign ip_id = 0] [#-- IPs HAL handles declar --]
[#list usedIPs as ip]
[#if peripheralParams.get(ip).entrySet()?size>0&&ip? contains(ip_grp)]
extern ${ip_hndlType} ${ip_var}${ip.replace(ip_grp,"")};[#if ip_id == 0] // table of handles[/#if]
[#assign ip_id = ip_id + 1]
[/#if]
[/#list][#-- list IPs --]
#n
[#assign ip_id = 0] [#-- IPs HAL handles --]
[#list usedIPs as ip]
[#if peripheralParams.get(ip).entrySet()?size>0&&ip?contains(ip_grp)]
#define ${ip_grp}_${ip_id}_HNDL ${ip_var}${ip.replace(ip_grp,"")}[#if ip_id == 0] // table of handles[/#if]
[#assign ip_id = ip_id + 1]
[/#if]
[/#list][#-- list IPs --]
[/#list][#-- list ip_grps --]
[/#list][#-- list configs --]
Run Code Online (Sandbox Code Playgroud)
直到这一刻我才使用过 freemarker。
我的问题是我无法找到从该数据模型中提取更多信息的方法:
[#assign ip_tim =["TIM", "htim", "TIM_TypeDef", "TIM_HandleTypeDef" ]]),如 UM1718 中所述:
用户模板文件必须与STM32CubeMX数据模型兼容。这意味着模板必须以下列行开头:
Run Code Online (Sandbox Code Playgroud)[#ftl] [#list configs as dt] [#assign data = dt] [#assign peripheralParams =dt.peripheralParams] [#assign peripheralGPIOParams =dt.peripheralGPIOParams] [#assign usedIPs =dt.usedIPs]并结束于
Run Code Online (Sandbox Code Playgroud)[/#list]
这是否意味着无法提取必要的信息(主要是有关 GPIO 的信息)?
或者我怎样才能检查这个?我尝试用这个来描述数据模型,但只找到了 GPIO 端口列表。
这是我大约一个月前打开的 ST 支持票的回复。所以现在这是我问题的一个实际答案。
尊敬的顾客,
不幸的是,这个功能是相当新的、实验性的,并且没有很好的记录,所以我无法帮助您解决这个问题。API 也可能在未来版本中发生更改。如果我理解正确,您可以通过手动定义数组来解决此问题。
谨致问候, ST MCU 支持团队
我正在等待新版本发布!
| 归档时间: |
|
| 查看次数: |
4749 次 |
| 最近记录: |