搜索
bottom↓
回复: 171

Python实现RTT客户端,源码+详细讲解,绝对原创!申请置酷!

  [复制链接]

出0入25汤圆

发表于 2016-3-19 16:19:37 | 显示全部楼层 |阅读模式
不知道RTT是什么、怎么用的请看下面这两个帖子:
JLINK RTT,完爆各种printf形式,从此swo是路人
开贴研究:JLINK RTT,完爆各种printf形式,从此swo是路人

RTT确实是调试神器,可RTT的电脑客户端太不给力,只能显示文字不说,连复制、清除这些基本功能都没有,所以就想自己做一个RTT客户端出来

经过几天的刻苦 摸索加上神器Python的加持,终于制作出了初版可用的RTT客户端,之前得到很多莫友的各种帮助,所以赶快贡献出来,希望对各位莫友有用。。

首先上效果图:
文本显示:


波形显示


此客户端软件要正常工作需要指定JlinkARM.dll文件路径,此文件用来实际控制JLINK硬件;还需要指定工程中的.map文件路径,因为可以从此文件查到_SEGGER_RTT结构体在内存中的位置

下面我来一步一步详细讲解一下实现的原理,,重点讲解如何控制JLINK读写单片机SRAM中的数据,因为这是实现此客户端的关键,,

第一条是导入Python中的两个模块ctypes和struct,相当于C语言中的include,只有先导入才能用
第二条是使用Python中的神器ctypes加载JLink的动态链接库JLinkARM.dll,加载后就可以直接使用Python中的jlink变量来调用JLinkARM.dll中的函数,实现对Jlink硬件的控制
第三条是实际连接JLink调试器,执行完此条语句之后,在电脑任务栏的右下角会出现如下图所示的图标,说明已经连接到JLink调试器上


现在我们已经连接到JLINK上了,下面就可以通过JLINK来读单片机SRAM上的数据了,下面我们来读取SRAM中的SEGGER_RTT_CB结构体变量_SEGGER_RTT,因为此变量存储了读写数据的所有信息
要读此变量需要先知道此变量在内存中的位置,这可以通过查看MDK编译生成的.map文件来实现,如下:

可知,_SEGGER_RTT在地址0x20001400处,_SEGGER_RTT在内存中占用的内存的长度可以通过查看SEGGER_RTT_CB结构体的定义知道,下面就来读取出_SEGGER_RTT

实际的读取时第三条语句调用JLinkARM.dll的JLINKARM_ReadMem函数来完成的,但调用此函数前需要构建出正确的参数
第四条打印出了读出的内容,,可以看出,前10个字节是“SEGGER RTT”,这是_SEGGER_RTT变量在内存中的标记,,显然我们正确读取到了_SEGGER_RTT

后面那一堆10进制数应该就是SEGGER_RTT_CB结构体其他成员的值了,,可是一个字节一个字节的计算出各个成员的值实在太浪费时间了,所以我们用Python的另外一个模块struct来解析这一段内存

unpack函数的第一个参数是解析字符串,,其中16s表示16个字符的字符串,L表示4字节的int,24x表示跳过24字节不管,,struct的更详细的用法可去网站上去搜索看一下
通过对照SEGGER_RTT_CB结构体的定义可以知道上面15个数值的具体含义

至此,我们已经完成了通过JLINK读取内存,并解析出_SEGGER_RTT结构体变量各个域的值,,然后我们通过解析出SEGGER_RTT_RING_BUFFER中pBuffer指向的内存,就能读取出用户要显示的数据

当然,读取完数据后还需要通过JLINKARM_WriteMem函数来修改内存中的读偏移RdOff,,这些更加完整、详细的操作可以通过读下面的程序源码来理解:

完整程序源码:
执行此程序需要安装Python 2.7、PyQt和PyQwt

欢迎大家尝试使用,希望莫大能给置酷

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入25汤圆

 楼主| 发表于 2019-3-13 11:51:56 | 显示全部楼层
github,,欢迎mark:https://github.com/XIVN1987/JRTTView

出0入0汤圆

发表于 2016-3-19 16:25:41 | 显示全部楼层
厉害,受用了,谢谢!

出0入0汤圆

发表于 2016-3-19 16:46:04 | 显示全部楼层
本帖最后由 lanfeng0107 于 2016-3-19 16:54 编辑

研究中...

出0入0汤圆

发表于 2016-3-19 16:53:27 | 显示全部楼层
前排就坐听讲

出0入25汤圆

 楼主| 发表于 2016-3-19 16:58:27 | 显示全部楼层
lanfeng0107 发表于 2016-3-19 16:46
请教些问题:
我看到在gwnpeter的帖子中他添加了那个结构体:
static SEGGER_RTT_CB _SEGGER_RTT = {

RTT代码中SEGGER_RTT_CB结构体和SEGGER_RTT_RING_BUFFER结构体定义处有详细解释

  1. typedef struct {
  2.   const     char*    sName;         // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4"
  3.             char*    pBuffer;       // Pointer to start of buffer
  4.             unsigned SizeOfBuffer;  // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty.
  5.   volatile  unsigned WrOff;         // Position of next item to be written by either host (down-buffer) or target (up-buffer). Must be volatile since it may be modified by host (down-buffer)
  6.   volatile  unsigned RdOff;         // Position of next item to be read by target (down-buffer) or host (up-buffer). Must be volatile since it may be modified by host (up-buffer)
  7.             unsigned Flags;         // Contains configuration flags
  8. } SEGGER_RTT_RING_BUFFER;

  9. //
  10. // RTT control block which describes the number of buffers available
  11. // as well as the configuration for each buffer
  12. //
  13. //
  14. typedef struct {
  15.   char                    acID[16];                                 // Initialized to "SEGGER RTT"
  16.   int                     MaxNumUpBuffers;                          // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2)
  17.   int                     MaxNumDownBuffers;                        // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2)
  18.   SEGGER_RTT_RING_BUFFER  aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS];       // Up buffers, transferring information up from target via debug probe to host
  19.   SEGGER_RTT_RING_BUFFER  aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS];   // Down buffers, transferring information down from host via debug probe to target
  20. } SEGGER_RTT_CB;
复制代码


MaxNumUpBuffers是从单片机向电脑传数据的Buffer的个数,默认是2
下面定义了2个向电脑传数据的环形缓冲区和两个电脑向单片机传数据的环形缓冲区,,

缓冲区的名字是可选的,Terminal、Log其实没啥太大用处,,
缓冲区的关键参数有4个,分别是指向缓冲数组的指针、数组的大小和读、写指针

比如Up环形缓冲区,其实就是单面机网里面装数据,J-Link RTT Viewer通过Jlink把里面的数据读出来显示,,就这么简单

出0入0汤圆

发表于 2016-3-19 17:02:33 | 显示全部楼层
顶顶,这个很实用。

出0入0汤圆

发表于 2016-3-19 17:06:41 | 显示全部楼层
RTT 客户端需要输入芯片型号比较烦人,是因为它的实现方式是通过芯片型号对应描述文件,描述文件给出RAM地址范围,然后从地址范围盲搜索数据缓冲区吧。   而楼主不用输入芯片型号而改用输入MAP,应该就是直接定位到数据缓冲区替代盲搜索对么。   
另,在线调试和RTT同时使用时候,MDK和RTT两个程序都需要跟JLINK通信,是怎么协调的。

出150入0汤圆

发表于 2016-3-19 17:11:21 来自手机 | 显示全部楼层
发送速度是多快 最多发送多少个变量

出0入0汤圆

发表于 2016-3-19 17:11:37 | 显示全部楼层
这个牛,之前看过这个调试方式但是不会弄

出0入0汤圆

发表于 2016-3-19 17:13:48 | 显示全部楼层
搬凳子坐过来学习

出0入0汤圆

发表于 2016-3-19 17:18:14 | 显示全部楼层
XIVN1987 发表于 2016-3-19 16:58
RTT代码中SEGGER_RTT_CB结构体和SEGGER_RTT_RING_BUFFER结构体定义处有详细解释

明白了.....还有一点:SEGGER_RTT_RING_BUFFER 在哪里?么找到...

出0入0汤圆

发表于 2016-3-19 17:41:54 | 显示全部楼层
lanfeng0107 发表于 2016-3-19 17:18
明白了.....还有一点:SEGGER_RTT_RING_BUFFER 在哪里?么找到...

去segger的网站下载最新的Jlink软件包,里面带了RTT在单片机上实现的源码,里面有一切~

出0入25汤圆

 楼主| 发表于 2016-3-19 17:51:33 | 显示全部楼层
lanfeng0107 发表于 2016-3-19 17:18
明白了.....还有一点:SEGGER_RTT_RING_BUFFER 在哪里?么找到...


老版本里面叫RING_BUFFER,新版本改叫SEGGER_RTT_RING_BUFFER了,,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入25汤圆

 楼主| 发表于 2016-3-19 18:02:06 | 显示全部楼层
huangqi412 发表于 2016-3-19 17:06
RTT 客户端需要输入芯片型号比较烦人,是因为它的实现方式是通过芯片型号对应描述文件,描述文件给出RAM地 ...


对,应该是你说的这样,,感觉用.map文件比搜索更简单、快捷点儿,,因为它那个方式有时候找不到,还得自己指定精确位置,,而且每次编译之后_SEGGER_RTT的位置都可能会改变,,很麻烦。。

至于你说的MDK调试时和这个程序怎么协调,,我刚刚试了下,不会冲突,,两个程序可以一起工作,,此时电脑右下角会出现两个Jlink Control Panel图标。。

出0入25汤圆

 楼主| 发表于 2016-3-19 18:08:36 | 显示全部楼层
大风起兮 发表于 2016-3-19 17:11
发送速度是多快 最多发送多少个变量


我实测过,用JLINK v9、JTAG接口、STM32F103,最高可以到567KB/s,速度是UART 115200波特率时候的50倍

以后出来更高级的JLINK后应该可以更快

当然,用只有SWD接口的JLINK-OB的话,速度可能会慢不少,,不过那也肯定比串口快

而且RTT只需要单片机把数据放到SRAM的指定位置就可以了,,不用像串口那样一直等着发送完成、或开个缓冲区让串口中断来发,,简单很多

出0入0汤圆

发表于 2016-3-19 18:16:45 | 显示全部楼层
XIVN1987 发表于 2016-3-19 18:08
我实测过,用JLINK v9、JTAG接口、STM32F103,最高可以到567KB/s,速度是UART 115200波特率时候的50倍

...

串口作为最通用最基本的调试手段,还是无法替代的。   8位机就没这个RTT只能串口了。   现在单片机串口一般也可以到几个M位速的。  

出0入0汤圆

发表于 2016-3-19 18:34:57 | 显示全部楼层
看不懂,好像很厉害的样子

出150入0汤圆

发表于 2016-3-19 18:44:33 来自手机 | 显示全部楼层
XIVN1987 发表于 2016-3-19 18:08
我实测过,用JLINK v9、JTAG接口、STM32F103,最高可以到567KB/s,速度是UART 115200波特率时候的50倍

...

v8呢  我需要100us拿到一个16位数据 不知道v8能胜任不

出150入0汤圆

发表于 2016-3-19 18:45:21 来自手机 | 显示全部楼层
大风起兮 发表于 2016-3-19 18:44
v8呢  我需要100us拿到一个16位数据 不知道v8能胜任不

好像不支持画两个以上曲线?

出0入0汤圆

发表于 2016-3-19 18:58:15 | 显示全部楼层
赞一个!打赏了

出0入0汤圆

发表于 2016-3-19 19:07:27 来自手机 | 显示全部楼层
给力!赞

出0入0汤圆

发表于 2016-3-19 19:08:54 | 显示全部楼层
收藏了,谢谢楼主分享

出0入0汤圆

发表于 2016-3-19 19:13:43 来自手机 | 显示全部楼层
漂亮。。。。。。。。。

出0入0汤圆

发表于 2016-3-19 19:32:46 | 显示全部楼层
谢楼主分享         

出0入0汤圆

发表于 2016-3-19 20:17:03 | 显示全部楼层
这个不错,顶原创

出0入0汤圆

发表于 2016-3-19 20:53:11 | 显示全部楼层
XIVN1987 发表于 2016-3-19 17:51
老版本里面叫RING_BUFFER,新版本改叫SEGGER_RTT_RING_BUFFER了,,

谢谢,有问题再请教!
像楼主学习,有时间做一个C#的!

出0入0汤圆

发表于 2016-3-19 21:26:40 | 显示全部楼层
这个不错.好

出0入0汤圆

发表于 2016-3-19 21:37:55 | 显示全部楼层
谢谢楼主分享!!!

出0入0汤圆

发表于 2016-3-19 22:31:14 来自手机 | 显示全部楼层
强烈支持

出0入0汤圆

发表于 2016-3-19 22:51:33 来自手机 | 显示全部楼层
这个方法不错。非常感谢楼主分享Ծ ̮ Ծ

出0入0汤圆

发表于 2016-3-19 22:55:58 | 显示全部楼层
谢谢分享。

出0入0汤圆

发表于 2016-3-19 22:58:57 | 显示全部楼层
good!           

出0入0汤圆

发表于 2016-3-20 00:20:17 来自手机 | 显示全部楼层
高大上 酷!

出0入0汤圆

发表于 2016-3-20 09:22:49 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2016-3-20 10:50:35 | 显示全部楼层
不明白,这个跟SWD的在线调试有什么区别???

出0入25汤圆

 楼主| 发表于 2016-3-20 16:48:50 | 显示全部楼层
大风起兮 发表于 2016-3-19 18:45
好像不支持画两个以上曲线?


100us发送16位数据,那也就20KByte/s,v8肯定没问题

要画两条以上曲线的话需要同时修改单片机端的RTT程序和上位机程序,比如RTT开2个UP通道,把两条曲线的数据分别填到两个UP通道的Buffer中,然后上位机从两个通道分别取出数据绘制不同的曲线

理论上可以画几条曲线就开几个UP通道,然后让上位机取几个通道的数据,,这种方式修改最简单方便,,想开几个通道开几个,只要单片机RAM够大就行

出0入25汤圆

 楼主| 发表于 2016-3-20 16:57:55 | 显示全部楼层
lanfeng0107 发表于 2016-3-19 20:53
谢谢,有问题再请教!
像楼主学习,有时间做一个C#的!


做这个上位机的话,界面、交互、画图对C#来说都很Easy,关键的是怎么用你的C#程序调用JLinkARM.dll来控制JLink仿真器执行读写单片机SRAM的命令
python有ctypes模块可以很方便的完成这个功能,,
C#的话有个坛友实现了类似的功能,,在c#的 JLINK API,自己用的,推荐你去看一下

出0入0汤圆

发表于 2016-3-20 19:51:36 | 显示全部楼层
XIVN1987 发表于 2016-3-20 16:57
做这个上位机的话,界面、交互、画图对C#来说都很Easy,关键的是怎么用你的C#程序调用JLinkARM.dll来控 ...

好的,非常感谢!

出0入0汤圆

发表于 2016-3-20 20:15:44 | 显示全部楼层
不错,有空研究一下。

出0入0汤圆

发表于 2016-3-20 22:06:25 | 显示全部楼层
赞楼主 Maker 的精神!

出10入95汤圆

发表于 2016-3-20 22:37:11 | 显示全部楼层
楼主牛人那!!!

出0入0汤圆

发表于 2016-3-21 09:00:30 | 显示全部楼层
非常感谢,不得不顶啊!

出0入0汤圆

发表于 2016-3-21 09:29:35 | 显示全部楼层
RTT如果支持输入就好了,就可以取代串口调试了。

出0入25汤圆

 楼主| 发表于 2016-3-21 10:36:05 | 显示全部楼层
sblpp 发表于 2016-3-21 09:29
RTT如果支持输入就好了,就可以取代串口调试了。


RTT是支持输入的,只是我这个客户端没还没做。。

出0入0汤圆

发表于 2016-3-21 10:46:50 | 显示全部楼层
牛得一塌糊涂~~~~~~

出0入0汤圆

发表于 2016-3-21 11:20:33 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2016-3-21 12:53:30 | 显示全部楼层
谢谢楼主分享。

出0入0汤圆

发表于 2016-3-21 13:49:18 | 显示全部楼层
mark!标记

出0入0汤圆

发表于 2016-3-21 13:52:37 | 显示全部楼层
给楼主点个大赞啊!!谢谢分享!

出0入13汤圆

发表于 2016-3-21 14:59:04 | 显示全部楼层
这个真心不错,谢谢分享

出0入0汤圆

发表于 2016-3-21 15:08:18 | 显示全部楼层
本帖最后由 xaper 于 2016-3-21 15:15 编辑

谢谢分享,正想研究呢

出0入0汤圆

发表于 2016-3-21 16:14:33 | 显示全部楼层
虽然看不懂 还是先 mark 一下

出0入0汤圆

发表于 2016-3-21 17:18:58 | 显示全部楼层
mark一下 牛人

出0入0汤圆

发表于 2016-3-21 17:25:21 | 显示全部楼层
这事个好事,楼主可以放在github上么,有空我也可以贡献一些代码,作为一个通用工具开源项目?

出0入0汤圆

发表于 2016-3-21 17:32:13 | 显示全部楼层
好东西,必须顶一下,谢谢分享

出0入0汤圆

发表于 2016-3-21 17:38:38 | 显示全部楼层
mark 收藏

出100入101汤圆

发表于 2016-3-21 19:59:19 | 显示全部楼层
LZ大牛!

出100入101汤圆

发表于 2016-3-21 20:03:17 | 显示全部楼层
直接用jlink仿真方式不是效果更好?

出0入0汤圆

发表于 2016-3-22 08:29:48 | 显示全部楼层
楼书主厉害!!

出0入25汤圆

 楼主| 发表于 2016-3-22 09:21:16 | 显示全部楼层
fengyunyu 发表于 2016-3-21 20:03
直接用jlink仿真方式不是效果更好?


昨天我还没想好怎么回答你这个问题,,昨晚看到一篇文章,,里面有两句话我觉得是对这个问题的最好解答


文章全文在这里,有兴趣可以去看一下:FreeRTOS Continuous Trace Streaming

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入25汤圆

 楼主| 发表于 2016-3-22 09:28:16 | 显示全部楼层
lr120363092 发表于 2016-3-20 10:50
不明白,这个跟SWD的在线调试有什么区别???


见60楼对另一个类似问题的回复,,

简单来说,SWD是Debug,RTT是Trace,二者互为补充,,

出0入0汤圆

发表于 2016-3-22 10:42:07 来自手机 | 显示全部楼层
楼主,ctypes 在64位下不灵啊,有没有招?

出0入0汤圆

发表于 2016-3-22 10:55:54 | 显示全部楼层
请问楼主,PyQwt用的那个版本?网上我下了5.2的。

出0入0汤圆

发表于 2016-3-22 11:03:49 | 显示全部楼层
谢谢分享,我要认真学习了.

出0入25汤圆

 楼主| 发表于 2016-3-22 11:25:45 | 显示全部楼层
Excellence 发表于 2016-3-22 10:55
请问楼主,PyQwt用的那个版本?网上我下了5.2的。


Python 2.7 + PyQt4 + PyQwt 安装方法:

1、安装Python,这个是Python脚本语言解释器
python-2.7.11.msi
最好安装2.7.11之后的版本,因为它们自带了pip,安装下面的软件需要用pip;如果安装python-2.7.2的话需要再自己安装pip

2、安装PyQt,这个是编写GUI程序的Python库
在命令行窗口执行 pip install PyQt4-4.11.4-cp27-none-win32.whl

3、安装PyQwt,这个是显示波形图的Python库
在命令行窗口执行 pip install PyQwt-5.2.1-cp27-none-win32.whl

Python 2.7去官网下载即可,,
PyQt和PyQwt的.whl安装包去下面的地址下载:
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqwt


如果嫌麻烦可以直接去下载安装Anaconda,这个是Python + 一堆各种功能的包的集合体,,里面带很多有用的库,,如numpy、scipy、matplotlib、sympy、pandas等,,不过体积比较大,接近400M

出0入25汤圆

 楼主| 发表于 2016-3-22 11:27:11 | 显示全部楼层
waliwali 发表于 2016-3-22 10:42
楼主,ctypes 在64位下不灵啊,有没有招?


我是在64位的windows 7上安装的Python 2.7,,安装方法见65楼

出0入0汤圆

发表于 2016-3-22 11:50:58 | 显示全部楼层
XIVN1987 发表于 2016-3-22 11:25
Python 2.7 + PyQt4 + PyQwt 安装方法:

1、安装Python,这个是Python脚本语言解释器

多谢。。。。。。
回去试试。
PYTHON 2.7资料比较多。

出0入0汤圆

发表于 2016-3-22 12:59:41 来自手机 | 显示全部楼层
我是64位的python 3.5 看来没办法了?

出0入0汤圆

发表于 2016-4-1 21:58:31 | 显示全部楼层
强大,学习了

出0入0汤圆

发表于 2016-4-3 16:37:54 | 显示全部楼层
厉害厉害

出0入0汤圆

发表于 2016-4-4 06:23:30 来自手机 | 显示全部楼层
这个很不错,学习了。

出0入0汤圆

发表于 2016-4-4 13:11:21 来自手机 | 显示全部楼层
Python确实强大,又发现两个挺不错的模块,回头也试试

出20入0汤圆

发表于 2017-3-5 16:05:04 | 显示全部楼层
牛逼,谢谢分享,可否分享一些python教程,对python感兴趣。

出0入0汤圆

发表于 2017-3-9 22:47:55 | 显示全部楼层
不错,学习中

出0入0汤圆

发表于 2017-3-9 23:48:07 | 显示全部楼层
我觉得学习python的最大的困难第一个是安装各种的软件包,还有就是做的有界面的软件的打包发布,请教下楼主有什么经验分享的吗?

出0入0汤圆

发表于 2017-3-10 08:56:11 | 显示全部楼层
正在看python,不过老是断断续续的,楼主的这个软件感觉有动力了

出0入25汤圆

 楼主| 发表于 2017-3-10 09:30:25 | 显示全部楼层
本帖最后由 XIVN1987 于 2017-3-10 09:32 编辑
散吧散吧 发表于 2017-3-9 23:48
我觉得学习python的最大的困难第一个是安装各种的软件包,还有就是做的有界面的软件的打包发布,请 ...



我以前也认为python做的软件打包很困难,所以学了好几年也没打过包,前几天网上查了下发现Python程序打包成.exe也没那么困难,下面是我最近打包的两个程序:

Python实现的RTT客户端打包成单文件免安装.exe重新上传
分享一个自己写的MDK项目转Qt Creator项目的工具

除了打包后的软件比较大之外,似乎凑合用也没啥问题

打包方法很简单,安装pyinstaller,然后执行“pyinstaller -F path/to/RTTView/RTTView.py”就行了,,可能是这两个软件比较简单,,就用到了Python、PyQt、PyQwt,,如果用到的外部模块多了可能就要麻烦些了

另外,因为我写的PyQt程序里都有下面这两句
import sip
sip.setapi('QString', 2)
所以pyinstaller安装成功后需要做一个配置:
在pyinstaller安装目录下的loader\rthooks\pyi_rth_qt4plugins.py顶部添加
import sip
sip.setapi('QString', 2)


至于说安装软件包,绝大多数情况下直接'pip install 软件包名称'就能安装上,对于需要有编译器才能安装的模块,,可以去下面这个网站试试,,他们给编译好了很多可以直接用
http://www.lfd.uci.edu/~gohlke/pythonlibs/

出0入0汤圆

发表于 2017-3-10 09:44:55 | 显示全部楼层
厉害厉害

出0入0汤圆

发表于 2017-3-10 13:44:23 | 显示全部楼层
谢谢分享,厉害。

出0入0汤圆

发表于 2017-3-10 13:45:53 | 显示全部楼层
牛人啊!

出0入0汤圆

发表于 2017-3-10 14:15:00 | 显示全部楼层
python是个好东西~

出0入0汤圆

发表于 2017-3-10 15:29:53 | 显示全部楼层
用的是哪个版本的RTT文件,我用6.14b驱动带的SEGGER_RTT_V614b,调试全速运行,RTT Client没有显示。
用这个帖子50楼里的RTT_Implementation_140806.zip 里的文件 可以显示,不知道为什么。
http://www.amobbs.com/forum.php? ... 0&highlight=rtt

出0入25汤圆

 楼主| 发表于 2017-3-10 15:36:35 | 显示全部楼层
huy666 发表于 2017-3-10 15:29
用的是哪个版本的RTT文件,我用6.14b驱动带的SEGGER_RTT_V614b,调试全速运行,RTT Client没有显示。
用这 ...


我用的JLINK和RTT的版本都是5.02k,6.14b的RTT实现可能改了

出0入0汤圆

发表于 2017-3-10 16:57:21 | 显示全部楼层
如果直接能读某地址的数据 可以做成类似Jlink Scope这样的软件了

出0入0汤圆

发表于 2017-3-10 16:58:35 | 显示全部楼层
XIVN1987 发表于 2017-3-10 15:36
我用的JLINK和RTT的版本都是5.02k,6.14b的RTT实现可能改了

请试一下新的RTT,覆盖原来的4个文件就行了。不行再改回去。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-3-10 17:06:30 | 显示全部楼层
散吧散吧 发表于 2017-3-9 23:48
我觉得学习python的最大的困难第一个是安装各种的软件包,还有就是做的有界面的软件的打包发布,请 ...

pip install xxx
easy install xxx
python安装库还是很简单的

出0入0汤圆

发表于 2017-3-11 13:03:34 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2017-3-11 16:36:31 来自手机 | 显示全部楼层
Mark.        

出0入0汤圆

发表于 2017-3-12 11:14:30 | 显示全部楼层
好东西   谢谢楼主分享   

出0入0汤圆

发表于 2017-3-13 10:50:37 | 显示全部楼层
牛逼,楼主我顶你

出0入0汤圆

发表于 2017-3-13 14:57:22 | 显示全部楼层
stm32f1.map文件在哪?怎么生成?搞不懂

出0入0汤圆

发表于 2017-3-15 16:40:51 | 显示全部楼层
很不错。!!!!

出0入0汤圆

发表于 2017-3-19 19:10:01 | 显示全部楼层
XIVN1987 发表于 2016-3-22 11:25
Python 2.7 + PyQt4 + PyQwt 安装方法:

1、安装Python,这个是Python脚本语言解释器

您好,想问一下,我按照您说的顺序安装好了,可是点击打开连接,python输出错误LoadLibrary argument 1 must be string,not unicode,是因为什么情况啊

出0入25汤圆

 楼主| 发表于 2017-3-19 20:20:54 | 显示全部楼层
liu13063711642 发表于 2017-3-19 19:10
您好,想问一下,我按照您说的顺序安装好了,可是点击打开连接,python输出错误LoadLibrary argument 1 m ...


是不是你的JLinkARM.dll文件所在路径有中文字符啊?换个没中文字符的试试

出0入0汤圆

发表于 2017-3-20 11:53:19 | 显示全部楼层
XIVN1987 发表于 2017-3-19 20:20
是不是你的JLinkARM.dll文件所在路径有中文字符啊?换个没中文字符的试试

没有啊,是不是我安装pyQt和pyQwt时,它们的源文件放在了有中文的目录里的原因啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入25汤圆

 楼主| 发表于 2017-3-20 13:38:16 | 显示全部楼层
liu13063711642 发表于 2017-3-20 11:53
没有啊,是不是我安装pyQt和pyQwt时,它们的源文件放在了有中文的目录里的原因啊 ...


根据下面的说法,这个问题似乎是Python新版本2.7.13引入的一个bug,也就是ctypes.LoadLibrary()这个函数的参数在2.7.13中只能是string,不能是unicode
我用的Python 2.7.12,没有这个问题,无法复现



不过对于这个bug,将unicode编码一下变成string应该就能避开,如下这样,你可以试试

改成

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-3-20 14:43:52 | 显示全部楼层
XIVN1987 发表于 2017-3-20 13:38
根据下面的说法,这个问题似乎是Python新版本2.7.13引入的一个bug,也就是ctypes.LoadLibrary()这个函数 ...

可以啦,谢谢

出0入0汤圆

发表于 2017-3-20 15:03:22 | 显示全部楼层
XIVN1987 发表于 2017-3-20 13:38
根据下面的说法,这个问题似乎是Python新版本2.7.13引入的一个bug,也就是ctypes.LoadLibrary()这个函数 ...

先再问一下,图形显示只要把数据界面切换到图形界面就可以了吗,还是需要其他设置或者是需要在程序中进行修改,我现在只能实现类似RTT的功能,就是输出文本数据,图形界面没有图形

出0入25汤圆

 楼主| 发表于 2017-3-20 15:59:13 | 显示全部楼层
liu13063711642 发表于 2017-3-20 15:03
先再问一下,图形显示只要把数据界面切换到图形界面就可以了吗,还是需要其他设置或者是需要在程序中进行 ...


数据要显示成波形肯定对数据的格式有要求啊,,必须是逗号分隔的数字才行

出0入0汤圆

发表于 2017-3-20 16:57:06 | 显示全部楼层
XIVN1987 发表于 2017-3-20 15:59
数据要显示成波形肯定对数据的格式有要求啊,,必须是逗号分隔的数字才行 ...

再次感谢,已出波形,是因为我的数据输出中加入了说明性字符串,不是纯数字,所以导致波形没有输出
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 03:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表