搜索
bottom↓
楼主: zgxcom123

【教程】摆脱UART,仅用JLink也能实现printf功能!! /*更新scanf*/

  [复制链接]

出0入0汤圆

发表于 2013-1-24 20:26:34 | 显示全部楼层
mark      

出0入0汤圆

发表于 2013-1-30 14:00:37 | 显示全部楼层
谢谢楼主,已经验证过方法可行

出0入0汤圆

发表于 2013-1-30 14:43:27 | 显示全部楼层
总结很详细,收藏了!

出0入0汤圆

发表于 2013-1-30 15:05:33 | 显示全部楼层
真心不错啊

出0入0汤圆

发表于 2013-1-31 22:56:06 | 显示全部楼层
强贴, 狂顶

出0入0汤圆

发表于 2013-2-1 06:59:47 | 显示全部楼层
MarkMarkMark

出0入0汤圆

发表于 2013-2-1 10:00:46 | 显示全部楼层
JLink ARM-OB STM32 中需要将哪个gpio引出来用呢?

出0入0汤圆

 楼主| 发表于 2013-2-1 10:24:15 | 显示全部楼层
qwert1213131 发表于 2013-2-1 10:00
JLink ARM-OB STM32 中需要将哪个gpio引出来用呢?

TDOIN

..........

出0入0汤圆

发表于 2013-2-1 10:47:13 | 显示全部楼层
好贴,JLink 实现printf功能
好好研究下

出0入0汤圆

发表于 2013-2-1 17:11:10 | 显示全部楼层
zgxcom123 发表于 2013-2-1 10:24
TDOIN

..........

感谢楼主啊

出0入0汤圆

发表于 2013-2-1 17:46:48 | 显示全部楼层
楼主研究很认真,赞

出0入0汤圆

发表于 2013-2-1 19:02:40 | 显示全部楼层
Scanf 也搞出来了呀,楼主V5

出0入0汤圆

发表于 2013-2-1 22:53:41 | 显示全部楼层
不错,强!

出0入0汤圆

发表于 2013-2-19 14:01:08 | 显示全部楼层
minchina 发表于 2013-1-24 16:27
我用的STM32F103RBT6,根据您的更改,我一直死在了红色处的while。
int fputc(int ch, FILE *f) {
  if ( ...

我遇到和你一样的问题了。不知你的问题后来解决了没有?
我用的STM32F103RE,10MHz晶振,70MHz主频。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-2-20 09:42:03 | 显示全部楼层
不错!
不过有个问题,代码看起来是轮询发送的,不知道对系统实时性产生多少影响?
有没有可能做到用中断和缓冲区的方式发送?

出0入0汤圆

发表于 2013-2-20 10:10:16 | 显示全部楼层
我的问题解决了,把MDK升级为V4.6,一样的程序就能输出了。谢谢楼主指点了。

出0入0汤圆

发表于 2013-2-20 10:23:21 | 显示全部楼层
好帖要顶!!

出0入0汤圆

发表于 2013-2-20 10:45:23 | 显示全部楼层
挺好的,以后试试

出0入0汤圆

发表于 2013-2-20 11:14:49 | 显示全部楼层
很好的资料呀!
printf

出0入0汤圆

 楼主| 发表于 2013-2-20 11:19:05 | 显示全部楼层
最近调试一直在用这个功能~ 很好用!!!

不过…………如果程序编写有错误的话~~ 这个功能就无法使用,只能JLink单步调试来查错

出0入0汤圆

发表于 2013-2-20 12:18:52 | 显示全部楼层
本帖最后由 yucejun 于 2013-2-20 12:40 编辑
zgxcom123 发表于 2013-2-20 11:19
最近调试一直在用这个功能~ 很好用!!!

不过…………如果程序编写有错误的话~~ 这个功能就无法使用,只 ...


楼主,你用的JLINK驱动是什么版本的?
貌似跟JLINK驱动也有关系,升级MDK V4.6后,按提示把JLINK驱动也升级下,就可以使用了。

出0入0汤圆

发表于 2013-2-20 19:52:58 | 显示全部楼层
这个方法好啊!

出0入8汤圆

发表于 2013-2-20 20:47:21 | 显示全部楼层
好好好!!!!

出0入0汤圆

发表于 2013-2-20 20:58:38 | 显示全部楼层

出0入0汤圆

发表于 2013-2-25 11:10:34 | 显示全部楼层
正需要,感谢分享, 我用6根线做SWD 包含VCC和GND

出0入0汤圆

发表于 2013-2-25 16:00:41 | 显示全部楼层
这个方法很不错啊

出0入0汤圆

发表于 2013-2-25 16:09:48 | 显示全部楼层
学习了.....

出0入0汤圆

发表于 2013-3-19 19:03:07 | 显示全部楼层
学习了,明天试一下

出0入0汤圆

发表于 2013-3-19 21:22:54 | 显示全部楼层
ulink   行不行啊。。

出0入0汤圆

发表于 2013-3-19 23:35:58 | 显示全部楼层
感觉挺好用的,有空我也来试试。

出0入0汤圆

发表于 2013-3-19 23:39:31 | 显示全部楼层
技术贴学习了

出0入0汤圆

发表于 2013-3-19 23:45:27 | 显示全部楼层
下次试试

出0入0汤圆

发表于 2013-3-19 23:50:37 | 显示全部楼层
顶起!!!

出0入0汤圆

发表于 2013-4-10 00:09:05 | 显示全部楼层
IAR中直接printf函数就可打印,无压力啊

出0入0汤圆

发表于 2013-4-10 12:15:26 来自手机 | 显示全部楼层
好东西 感谢楼主分享!

出0入0汤圆

发表于 2013-5-6 15:14:21 | 显示全部楼层
我试了下能够实现回显。只要在楼主的基础上,修改一下core_cm3.h中的ITM_ReceiveChar函数,在函数中添加一句ITM_SendChar(ch);
添加后代码效果如下:

  1. static __INLINE int ITM_ReceiveChar (void) {
  2.   int ch = -1;                               /* no character available */

  3.   if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {
  4.     ch = ITM_RxBuffer;
  5.     ITM_SendChar(ch);         //添加部分,收到后立即送出显示
  6.     ITM_RxBuffer = ITM_RXBUFFER_EMPTY;       /* ready for next character */
  7.   }
  8.   
  9.   return (ch);
  10. }
复制代码
最终显示结果如下:

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-5-6 16:27:05 | 显示全部楼层
不能回显不是bug....回显是设备提供的一种机制...不是终端提供的....

出0入0汤圆

发表于 2013-5-23 22:06:24 | 显示全部楼层
乱码,求解!

出0入0汤圆

发表于 2013-5-24 02:32:38 | 显示全部楼层
学习学习了~~~~

出0入0汤圆

发表于 2013-5-24 07:52:46 | 显示全部楼层
不错的总结。。支持。。

出0入0汤圆

发表于 2013-5-24 16:48:35 | 显示全部楼层
njchenmin 发表于 2013-1-18 06:34
回去试试

楼主头像是苏菲

出0入0汤圆

发表于 2013-5-24 16:53:00 | 显示全部楼层
Mark。

出0入0汤圆

发表于 2013-5-24 22:42:10 | 显示全部楼层
废话不说,立刻标记

出0入0汤圆

发表于 2013-5-25 12:09:04 | 显示全部楼层
玉石俱焚 发表于 2013-5-24 16:48
楼主头像是苏菲

答对了

出0入0汤圆

发表于 2013-5-28 17:32:42 | 显示全部楼层
mark
mark

出0入0汤圆

发表于 2013-7-6 23:28:27 | 显示全部楼层
这个方法不错。

出0入0汤圆

发表于 2013-7-6 23:43:29 来自手机 | 显示全部楼层
这个学习一下   

出0入0汤圆

发表于 2013-7-7 05:45:34 | 显示全部楼层
要多连两根线,有点不爽

出0入0汤圆

发表于 2013-7-7 09:18:37 来自手机 | 显示全部楼层
xiaojl123456 发表于 2013-5-6 15:14
我试了下能够实现回显。只要在楼主的基础上,修改一下core_cm3.h中的ITM_ReceiveChar函数,在函数中添加一 ...

mdk下有个regarget.c文件,用于重定向fputc等函数,那里有支持回显,不要修改库文件,那里还支持scanf,不过有点局限性

出0入0汤圆

发表于 2013-7-7 10:30:03 | 显示全部楼层
好东西,顶起来!

出0入0汤圆

发表于 2013-7-7 12:21:45 来自手机 | 显示全部楼层
不错,顶…
来自:amoBBS 阿莫电子论坛 Windows Phone 7 客户端

出20入118汤圆

发表于 2013-7-7 13:50:57 | 显示全部楼层
果断mark 必须mark

出0入0汤圆

发表于 2013-7-7 18:30:16 | 显示全部楼层
swo debug info output

出0入0汤圆

发表于 2013-7-7 18:46:51 | 显示全部楼层

很好,可以省去蜘蛛网

出0入0汤圆

发表于 2013-11-25 22:33:52 | 显示全部楼层
进来学习一下

出0入4汤圆

发表于 2013-11-25 23:43:41 | 显示全部楼层
已经用上了!!!不知道什么时候能把scanf的bug去掉

出0入0汤圆

发表于 2013-11-26 00:00:20 | 显示全部楼层
不解,都有仿真器了,不就可以直接查看数据了吗?难道IAR不支持这个功能?

出0入0汤圆

发表于 2013-11-26 00:03:33 来自手机 | 显示全部楼层
这个mark明天试试

出0入37汤圆

发表于 2013-11-26 08:59:44 来自手机 | 显示全部楼层
mark试试看

出0入0汤圆

发表于 2013-11-26 09:09:09 | 显示全部楼层
配上可变参数和宏开关更爽。

出0入4汤圆

发表于 2013-11-26 09:22:41 | 显示全部楼层
试过一次没有弄出来,

出0入0汤圆

发表于 2013-11-26 09:32:18 | 显示全部楼层
看着很强大

改天试试

出0入0汤圆

发表于 2013-11-26 14:12:09 | 显示全部楼层
这个涨姿势了,顶一下!

出0入0汤圆

发表于 2013-11-28 16:29:36 | 显示全部楼层
不错,很实用,以后做简单调试的时候,可以省掉串口了

出0入0汤圆

发表于 2013-12-25 17:28:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-3-10 16:28:09 | 显示全部楼层
补充点资料。

Library Retarget File

http://www.keil.com/support/man/docs/gsac/gsac_retargetcortex.htm

Library Retarget File
Home » Create Application » Configure Cortex-M Target » Library Retarget File

Semihosting is not supported by MDK-ARM. Use the retargeting functionality of MDK-ARM instead. To prevent the linker from selecting libraries functions that use semihosting, MDK-ARM includes retarget files that redefine low-level I/O routines.

A RETARGET.C template file, located in the folder ..\ARM\Startup, implements the functionality required to adapt character I/O functions such as printf() and scanf().

Copy the RETARGET.C template to the project folder.
Include the copied file to the project (described in Create Source File).
Edit the file and make your changes. You may use the following code as a template and adapt it to your needs.
/*----------------------------------------------------------------------------
* Name:    Retarget.c
* Purpose: 'Retarget' layer for target-dependent low level functions
* Note(s):
*----------------------------------------------------------------------------
* This file is part of the µVision/ARM development tools.
* This software may only be used under the terms of a valid, current,
* end user licence from KEIL for a compatible version of KEIL software
* development tools. Nothing else gives you the right to use this software.
*
* This software is supplied "AS IS" without warranties of any kind.
*
* Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
*----------------------------------------------------------------------------*/

#include <stdio.h>
#include <rt_misc.h>

#pragma import(__use_no_semihosting_swi)


extern int sendchar (int c);
extern int getkey   (void);


struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;


int fputc(int c, FILE *f) {
  return (sendchar(c));
}


int fgetc(FILE *f) {
  return (getkey());
}


int ferror(FILE *f) {
  /* Your implementation of ferror */
  return EOF;
}


void _ttywrch(int c) {
  sendchar(c);
}


void _sys_exit(int return_code) {
label:  goto label;  /* endless loop */
}
Note
Refer to Tailoring the C library to a new execution environment for information about library retargeting.
Refer to Redefining target-dependent system I/O functions in the C library.
Refer to Redefining low-level library functions to enable direct use of high-level library functions in the C library
Refer to What is semihosting?

出0入0汤圆

发表于 2014-3-10 21:34:43 | 显示全部楼层
不错,谢谢,

出0入0汤圆

发表于 2014-3-11 10:17:05 | 显示全部楼层
好帖子,改天我驱试试。

出0入0汤圆

发表于 2014-3-11 10:18:11 | 显示全部楼层
mark一下。这个功能一直没找到。

出0入0汤圆

发表于 2014-3-11 13:50:05 | 显示全部楼层
收藏了先,有空试试看!

出0入0汤圆

发表于 2014-4-24 22:53:26 | 显示全部楼层
顶楼主,谢谢分享

出0入0汤圆

发表于 2014-5-10 10:43:13 | 显示全部楼层
记号,收藏

出0入0汤圆

发表于 2014-5-10 11:47:28 | 显示全部楼层
给力 mark

出0入0汤圆

发表于 2014-5-10 22:47:06 | 显示全部楼层
好方法。

出0入0汤圆

发表于 2014-5-10 23:04:20 | 显示全部楼层
这个必须顶起啊,大神膜拜膜拜

出0入0汤圆

发表于 2014-9-4 07:33:21 | 显示全部楼层
标记下。回头试试

出0入0汤圆

发表于 2014-9-5 16:52:57 | 显示全部楼层
以前还不知道呢 谢谢楼主

出0入0汤圆

发表于 2014-9-5 17:00:17 | 显示全部楼层
这个好  谢谢分享!!!!!!!!

出0入0汤圆

发表于 2014-9-5 17:04:32 | 显示全部楼层
不错,非常好用顶

出0入0汤圆

发表于 2014-9-9 15:54:46 | 显示全部楼层
记号。收藏

出0入0汤圆

发表于 2014-9-9 15:55:03 | 显示全部楼层
记号。收藏

出0入0汤圆

发表于 2014-9-9 16:02:26 | 显示全部楼层
mark    改天试一下

出0入0汤圆

发表于 2014-9-9 16:17:59 | 显示全部楼层
好东西,顶楼主!

出0入0汤圆

发表于 2014-9-10 20:15:21 | 显示全部楼层
这个功能好

出0入0汤圆

发表于 2014-9-10 22:38:21 | 显示全部楼层
更正一个错误,
必须加入这个ini配置文件才行,否则程序会卡在while死循环处!

出0入0汤圆

发表于 2014-9-10 22:38:47 | 显示全部楼层

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-9-11 00:08:38 | 显示全部楼层
漂亮啊,一直想如果能下载器可以直接上传数据多好啊,请问你这个上传的数据是下位机在全速运行输出的么

出0入0汤圆

发表于 2014-9-11 08:48:58 | 显示全部楼层
dr2001 发表于 2013-1-19 08:11
1、ARM7到ARM9可以用CP15的DCC进行双向信息传输。
2、Cortex系列有ITM的可以用ITM+SWO(似乎也可以走Trace  ...

为何你总是这么牛,最近刚刚发现segger开发的rtt,从其实现看就是你说的第3点。。。。

出0入0汤圆

发表于 2014-9-11 08:51:57 | 显示全部楼层
dr2001 发表于 2013-1-22 08:20
ITM自身是不能从外部获得数据的,PC向MCU发数据都没办法走ITM,必须用其它的手段;当然,CortexM系列能够用 ...

core_cm3.h中有接收字符的实现,和你说的一模一样,为何有惊人的巧合?

出0入0汤圆

发表于 2014-9-11 08:57:50 | 显示全部楼层

很好的资料呀!正在学STM32

出0入0汤圆

发表于 2014-9-11 09:00:08 | 显示全部楼层
贴个支持回显的重定向文件
  1. int fgetc(FILE *f) {
  2.   int ch;

  3.   do {
  4.     ch = GetKey ();
  5.   }
  6.   while (ch == -1);
  7.   ch =='\r'? SendChar('\n'):SendChar(ch);                                //显示输入,回车也显示成换行
  8.   return (ch);
  9. }
复制代码

出0入0汤圆

发表于 2014-9-11 09:19:42 | 显示全部楼层
有空的试试。。。

出0入0汤圆

发表于 2014-9-11 09:59:24 | 显示全部楼层
本帖最后由 dr2001 于 2014-9-11 10:04 编辑
myxiaonia 发表于 2014-9-11 08:51
core_cm3.h中有接收字符的实现,和你说的一模一样,为何有惊人的巧合?


可以参考一下ARM CoreSight的文档,ARM对调试工具的思路在Cortex系列变了。
Cortex年代下的CoreSight,是一个独立的总线主控(可以理解为执行仿真器发送的外部命令的简单、独特的ARM内核),地位和ARM Core基本等价。

所以,和ARM Core内部状态无关的操作,多核处理器代码怎么实现,仿真器就可以怎么干,区别只是速度而已,没实质区别。

多核批量数据交换常用的不就是个无锁的队列么。。。只不过Segger下手做这个事情了而已,自己想实现这个东西一点都不复杂。

这东西和虚拟机里的VirtIO设备原理一致,以后Segger搞不好直接提供基于仿真器的虚拟设备,方便调试什么的。
比如挂着仿真器,PC上可以虚拟出一个或者若干个网口/串口/etc,通过标准协议把数据包用SWD传到MCU内,PC上看就是个标准的接口之类的。或者SemiHosting之类的。
手段早都有,看应用需求。

出0入12汤圆

发表于 2014-9-11 12:23:01 | 显示全部楼层
支持一下,RTT 似乎更好用一些,也不怎么影响性能。

出0入0汤圆

发表于 2014-9-13 10:02:02 | 显示全部楼层
好东西,有空试一试

出10入95汤圆

发表于 2014-9-16 21:55:19 | 显示全部楼层
不错多谢分享

出0入0汤圆

发表于 2014-9-16 22:09:04 | 显示全部楼层
感谢楼主分享

出0入0汤圆

发表于 2014-9-16 22:12:24 | 显示全部楼层
这个要定啊

出0入0汤圆

发表于 2014-9-17 08:56:35 | 显示全部楼层
好神奇的样子

出0入0汤圆

发表于 2014-9-17 09:44:44 | 显示全部楼层
楼主,不错,值得学习
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-8-17 06:14

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

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