常州免费网站建站模板,淘宝刷单网站制作,找项目去哪个平台,苏州和城乡建设局网站首页目录
一、前言
二、txt文本定义版本号
三、mk文件定义版本号
四、python提取版本号到mk
五、代码初始化读取版本号 一、前言 工程达到ASPICE 1级以上后可以试着一个工程适配不同项目#xff0c;此时面对不同项目将输出不同的软件版本#xff0c;管理好版本输出显得尤为…目录
一、前言
二、txt文本定义版本号
三、mk文件定义版本号
四、python提取版本号到mk
五、代码初始化读取版本号 一、前言 工程达到ASPICE 1级以上后可以试着一个工程适配不同项目此时面对不同项目将输出不同的软件版本管理好版本输出显得尤为重要 二、txt文本定义版本号
首先在不同的客户文件夹下建立app_version.txt用于每次代码提交修改版本号 三、mk文件定义版本号
在mk文件中定义版本号并通过宏定义传到编译参数命令行宏中
#version
APP_VERSION_STR_TMP ? 2.3.0.0ifeq ($(APP_VERSION_STR_TMP),)
APP_VERSION_STR_TMP 1.0.0.0
endifAPP_VERSION_STR \$(strip $(APP_VERSION_STR_TMP))\COMPILE_OPT -DAPP_VERSION$(APP_VERSION_STR)
四、python提取版本号到mk
每次编译将txt中的版本提取到mk文件中
import osversion_getFile app_version.txt
cusGet_inputFile sdk_cr.mk
version_setFile firm.mkdef main():dirct os.getcwd()#1.get custoemrif(os.path.exists(cusGet_inputFile)):with open(cusGet_inputFile,r) as sdkCr_f:sdkCrCont sdkCr_f.readlines()for str_line in sdkCrCont:if FIRM_CUSTOMER in str_line:cusN str_line[str_line.find()1:].rstrip(\n)customerName cusN.strip()print(FIRM_CUSTOMER:%s%customerName)breakelse:print(%s not exit!%cusGet_inputFile)return#2.get app versionif customerName :print(CustomerName Empty Error!)returnapp_dir dirct\\firm\\customer\\ customerName \\version_getFileif(os.path.exists(app_dir)):with open(app_dir,r) as v_f:vFile v_f.readlines()for str_line in vFile:if major in str_line:v str_line[str_line.find(:)1:]v1 v.strip()elif project in str_line:v str_line[str_line.find(:)1:]v2 v.strip()elif firmware in str_line:v str_line[str_line.find(:)1:]v3 v.strip()elif algorithm in str_line:v str_line[str_line.find(:)1:]v4 v.strip()break;#TODO:get commitIDelse:continue;else:print(%s not exit!%version_getFile)return#3.set versionif v1 or v2 or v3 or v4 :print(version number Empty Error!)returnelse:print(v%s.%s.%s.%s%(v1,v2,v3,v4))firmMk_dir dirct\\firm\\version_setFileif(os.path.exists(firmMk_dir)):datafile open(firmMk_dir,r)lines datafile.readlines()lines[1] APP_VERSION_STR_TMP ? v1.v2.v3.v4\ndatafile open(firmMk_dir, w)datafile.writelines(lines)datafile.close()else:print(%s not exit!%version_setFile)if __name__ __main__:main();
在mk文件中添加运行该python脚本的shell指令
$(shell python make_version.py); 五、代码初始化读取版本号
最后将字符串版本转换为16进制传给对应的CAN报文输出到CAN总线
uint8_t char2hex(uint8_t value)
{if(value 0 value 9){return (value-0);}else if(value A value F){return (value-A10);}else if(value a value f){return (value-a10);}else{return 0xFF;}
}
#if 0
/*app: A.B.C.D boot: A.B.C*/
void fillABVersion(uint8_t* src,uint8_t* dst)
{for(int i0,j0;i8;i){if(src[i] 0x2E){continue;}else{dst[j] char2hex(src[i]);}if(jsizeof(dst))break;}
}
#else
/*app: AA.BB.CC.DD boot: AA.BB.CC*/
void fillABVersion(uint8_t* src,uint8_t* dst)
{uint8_t highByte0;uint8_t lowByte0;uint8_t isOneWord 1;for(int i0,j0;i16;i){if(src[i] 0x2E || src[i] 0){dst[j] (highByte4) (lowByte0xF);highByte0;lowByte0;isOneWord 1;}else{if(isOneWord){lowByte char2hex(src[i]);isOneWord 0;}else{highByte lowByte;lowByte char2hex(src[i]);isOneWord 1;}}if(jsizeof(dst))break;}
}
#endif
void getFillCR_0x404Ver(struct bl_radar_can_version_t* dst)
{uint8_t appVer[12]{0};uint8_t bootVer[8]{0};uint8_t av[4]{0};uint8_t bv[3]{0};MemCpy(appVer, APP_VERSION, sizeof(APP_VERSION));nvm_getBootVersion(8, bootVer);fillABVersion(appVer,av);fillABVersion(bootVer,bv);dst-app_major_version av[0];dst-app_minor_version av[1];dst-app_firmware_fix_version av[2];dst-app_algo_fix_version av[3];dst-boot_major_version bv[0];dst-boot_minor_version bv[1];dst-boot_firmware_fix_version bv[2];
}