使用freemaster对嵌入式MCU内部全局变量进行标定(自动化)
注意下面
如果有车载讨论需要的小伙伴,可以私信加我微信
,拉你进群,和同行业大佬交流
注意上面
前言
之前挑选MCU内部的标定方案时,大佬告知了一个方案,NXP芯片提供的一个免费标定MCU内部全局变量的软件工具freemaster(只限于NXP的芯片方案),虽然我后续找到了完全不受芯片限制的方案,但是还是有必要记录一下,也许后面还会用到
一、freemaster是什么软件
虽然懂得基本都懂,不懂得,我说了也白瞎。但还是简单带一下,一个用于手自动观测采用nxp芯片的嵌入设备的代码内部的全局变量工具
二、如何进行freemaster的自动标定
看了大佬提供的json_rpc方案,Python是支持rpc的,我们可以通过这种方案实现自动化控制freemaster软件进行自动化标定
1.具体代码
代码如下(示例):
from jsonrpclib import ServerProxy
from typing import Optional, List
class FreemasterCal():
def __init__(self):
self.server = ServerProxy("http://localhost:41000")
def start_comm(self,model=1):
"""
功能:启动Freemaster连接
"""
if self.server is not None:
if model == 1:
self.server.StartComm("DAP")
elif model == 2:
self.server.StartComm("PEMICRO")
elif model == 3:
self.server.StartComm("JLINK")
def stop_comm(self):
"""
功能:停止Freemaster连接
"""
if self.server is not None:
self.server.StopComm()
def read_symbol(self, name: Optional[str]):
"""
读取该变量名的的数据
"""
addr, size = self.__get_symbol_info(name)
data = self.__read_memory(addr, size)
return data
def __get_symbol_info(self, name) -> Optional[(int, int) or None]:
"""
通过变量名获取elf或map文件中的地址和长度,并返回出去
"""
if self.server is not None:
rtn_msg = self.server.GetSymbolInfo(name)
addr = rtn_msg['xtra']['addr']
size = rtn_msg['xtra']['size']
return addr, size
def __read_memory(self, addr: Optional[int], size: Optional[int]):
"""
读取内存地址中的数据
"""
if self.server is not None:
rtn_msg = self.server.ReadMemory(addr, size)
datalist = rtn_msg['data']
总结
以上代码只是简单写了实现,没有做相关的捕获异常,实际跑起来会有相关问题,仅提供思路给诸位参考,具体信息,建议诸位去参考freemaster相关的英文帮助文档
写在结尾
我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步