嵌入式框架模板构建方案

嵌入式框架模板构建方案

关键内容

  • python3.x
  • mako
  • yaml

实战演习

main.py

import yaml
from mako.template import Template
import os

def deep_merge_dict(dict1, ditc2):
    for key in ditc2:
        if key not in dict1:
            dict1.setdefault(key, ditc2[key])
        else:
            if isinstance(ditc2[key], dict):
                deep_merge_dict(dict1[key], ditc2[key])
            else:
                pass
def load_yaml(dir_):
    fn_dic = {}
    os.chdir(os.getcwd())
    for dir_lst in os.walk(dir_):
        fn_lst = dir_lst[2];
        for fn in fn_lst:
            if fn.endswith('.yml'):
                fn_path = dir_lst[0] + '\\' + fn;
                if fn_path not in fn_dic:
                    fn_dic.setdefault(fn, fn_path);
                else:
                    print("- Error: 1");
            else:
                pass
    return fn_dic

yaml_path = load_yaml("src")

data = {}
for key in yaml_path:
    yaml_fs = open(yaml_path[key], 'r', encoding = "utf-8")
    yaml_data = yaml_fs.read()
    yaml_fs.close()
    data1 = yaml.load(yaml_data)
    deep_merge_dict(data, data1)
l_data = data[':RSTMGR']['RST'].copy()

for key in l_data:
    if isinstance(l_data[key]['PRIO'], str):
        if l_data[key]['PRIO'] == 'LOW':
            l_data[key]['PRIO'] = -1
        elif l_data[key]['PRIO'] == 'HIGH':
            l_data[key]['PRIO'] = 0xFFFFFFFF
        else:
            print("err-----")

t_data = sorted(l_data.items(), key=lambda x:x[1]['PRIO'], reverse=True)
t = Template(filename = "test.tpl.c", module_directory = "C:/Python34/tpl")
f = open("test.txt", 'w')
txt = t.render(data = data, t_data = t_data)
txt = txt.replace('\r', '')
f.write(txt)
f.close()

资源文件.yml

:RSTMGR:
    RST:
        Test:
            OWNER: Test
            PRIO: 100
            FNCT: Test_vReset
:RESMGR:
    INIT:
        ActiveBios:
            Test:
                OWNER: Test
                PRIO:  100
                FNCT:  Test_vInit
        ActiveIgn:
            Test:
                OWNER: Test
                PRIO:  100
                FNCT:  Test_vInitIgn
                
:CYCMGR:
    CYC:
        CYCMGR_nen100ms:
            Test:
                OWNER: Test
                PRIO: 100
                FNCT: Test_vMain
                DEPCY_RESON: [ActiveIgn]
                DEPCY_RESOFF: []
                
:EVMGR:
    EVENT:
        TestUpdate:
            OWNER: Test

模板

<%def name="print_k(area, i=0)">\
    % for k in area:
<%_str = "--" * i%>\
        % if isinstance(area[k], dict):
${_str}${k}:
<%print_k(area[k], i+1)%>\
        % else:
${_str}${k}: ${area[k]}
        % endif
    % endfor
</%def>
${print_k(data)}

% for i in range(0, len(t_data)):
    ${t_data[i][1]['FNCT']}, /* RST_${t_data[i][1]['OWNER']} */
%endfor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值