python控制trace32(下)--Apple的学习笔记

一,前言

之前python控制trace32(上)--Apple的学习笔记中已经验证了我的设想,就是python可以控制trace32,且了解了控制原理,也了解了控制方法。掌握了此技术,就可以用此技术进行创造发明了。按我最初的目的是制作rtos的task os图形化监控或测试工具。原因是task.orti file虽然可以通过trace32看到task任务运行状态,但是数据不能导出,也不能再进行二次开发。若打印时间戳到内存中,无法时时dump数据,然后再用其它工具转为图像。为了创意能自由发挥,当然不能受制于工具限制。所以自己创作工具才是王道。

二,定制目标

那么我要利用python控制trace32先做一个简单的上下位机系统。下位机就移植Segger RTT,然后打印task的时间戳,上位机就自己读取ring buffer数据,修改成员变量Rdoff的值对环形队列进行读写控制。环形队列比较节约空间,用segger RTT直接移植到单片机的目的是为了快速验证上位机。之后下位机也可以自己写和简单的环形队列。

三,小试牛刀

1. 先看看RTT源码,之前仅使用过,所以今天要看看源码,便于联调。

_acUpBuffer数组和_acDownBuffer数组就是上下行的环形队列。

主要配置

支持的ring buffer数量,ring buffer上下行的代销,每次printf输入的最大字节数,数组满后是否跳过。对应调试时候的变量如下


其中用到的ring buffer结构体


SEGGER_RTT_WriteNoLock函数中主要处理ring。

关于WrOFF和最后将数据赋值到pBuffer中主要是_WriteNoCheck函数中的如下2句。

用途仅打印,只要初始化SEGGER_RTT_Init和SEGGER_RTT_printf的打印函数。

2. 编写简单的上位机,进行上下位机系统原型验证

了解了下位机是环形队列的原理,也了解了关键结构体及变量,那么上位机就知道要如何设计读写环形队列了。再利用python实现这样的逻辑调用对应的读写api,实验就完成了。先在10ms任务中打印数据,每次打印数据加1,验证数据准确性来代表上下位机系统联调成功。

主要代码如上,我将数据保存在csv,mylist每满128字节就以追加的方式保存到log.csv文件,验证了下数据都是加1的,说明系统运行符合预期。接着在下位机可以传任何数据,上位机拿到数据后想如何处理都可以。当然也可以修改成一收一发的命令交互方式。

四, 小结

上位机就这样分分钟做出来了,从设想到实验,及最后完成验证也就8个小时而已。涉猎的技术内容越广泛,越发现精髓都是一样的,无非表现形式不同。这应该也算触类傍通的成果物吧。原型验证完成后,将来可以基于此技术可行性,进行python控制trace32的各种上下位机的开发咯~

你可能感兴趣的:(python控制trace32(下)--Apple的学习笔记)