一个单片机调试小工具的编程思路

发布者:innovator7最新更新时间:2024-03-20 来源: elecfans关键字:单片机  编程思路 手机看文章 扫描二维码
随时随地手机看文章

一、概述

在平时编写STM32单片机代码时,我们经常会遇到某一个函数或某一个变量需要反复调试的情况,而常用的方法只能是在源码修改并下载至单片机调试。反复这样不仅麻烦,而且反复烧写单片机对其FLASH也有影响,因此就考虑编写一款小工具,可以实现: 

1)通过串口控制单片机执行我们期望的函数,同时函数参数最大支持5个,其参数类型支持char、short、int、float及其无符号类型和相应的指针,不支持long及double。

2)对于含有对字符串及数组操作的函数,需要通过数组传值后,在调用函数时写入该变量地址才能实现对这些变量的操作。支持函数返回值得显示。

3)支持对全局变量进行任意的修改。

4)支持十进制与十六进制切换.

5)通讯超时自动重传或关闭串口。建议配合KEIL一起使用,效果更好。本软件使用C#编写,运行环境为NET 4.5。先让大家看看效果,感兴趣的话可以继续往下看: 

  1. 上位机调试设置a069ca6bbac98595d2301a07b5581387_wKgZomTm_kqAaingAAQba2OnCjg192.png2.函数调用6b4c6e6ec68df122715b9c743a096183_wKgZomTm_kqATeU1AALnFrJ4uxA588.png

    3.全局变量的写入115c20e72038d2f06a1c0bee59f78b70_wKgZomTm_kqATwCPAAfQ_XaRxU0198.png 4.通讯超时处理fa919c3aedef3fc2092cc19155fa8998_wKgZomTm_kuARhzHAANWcIDcGbc798.png


二、上位机的处理 2.1 原理 在使用keil编译STM32后,我们会在.hex文件的同一个文件夹中发现一个.map文件。这个.map文件包含了源码中函数与全局变量的地址、大小、优化等信息。这里贴一个简化的.map文件给大家看一下:


Component: ARM Compiler 5.06 update 6 (build 750) Tool: armlink [4d35ed]


==============================================================================


Section Cross References


  startup_stm32f103xe.o(STACK) refers (Special) to heapauxi.o(.text) for __use_two_region_memory


  startup_stm32f103xe.o(HEAP) refers (Special) to heapauxi.o(.text) for __use_two_region_memory


  startup_stm32f103xe.o(RESET) refers (Special) to heapauxi.o(.text) for __use_two_region_memory


  startup_stm32f103xe.o(RESET) refers to startup_stm32f103xe.o(STACK) for __initial_sp


==============================================================================


Removing Unused input sections from the image.


  Removing main.o(.rev16_text), (4 bytes).


  Removing main.o(.revsh_text), (4 bytes).


  Removing main.o(.rrx_text), (6 bytes).


  Removing gpio.o(.rev16_text), (4 bytes).


  Removing gpio.o(.revsh_text), (4 bytes).


384 unused section(s) (total 34104 bytes) removed from the image.


==============================================================================


Image Symbol Table


  Local Symbols


  Symbol Name          Value Ov Type  SizeObject(Section)


  ../Core/Src/gpio.c       0x00000000 Number   0gpio.o ABSOLUTE


  ../Core/Src/main.c       0x00000000 Number   0main.o ABSOLUTE


  ../Core/Src/stm32f1xx_hal_msp.c    0x00000000 Number   0stm32f1xx_hal_msp.o ABSOLUTE


  ../Core/Src/stm32f1xx_it.c     0x00000000 Number   0stm32f1xx_it.o ABSOLUTE


  ../Core/Src/system_stm32f1xx.c   0x00000000 Number   0system_stm32f1xx.o ABSOLUTE


  ../Core/Src/tim.c        0x00000000 Number   0tim.o ABSOLUTE


  ../Core/Src/usart.c        0x00000000 Number   0usart.o ABSOLUTE


  ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c 0x00000000 Number   0stm32f1xx_hal.o ABSOLUTE


  ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c 0x00000000 Number   0stm32f1xx_hal_cortex.o ABSOLUTE


  ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c 0x00000000 Number   0stm32f1xx_hal_dma.o ABSOLUTE


  ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c 0x00000000 Number   0stm32f1xx_hal_exti.o ABSOLUTE




  Global Symbols




  Symbol Name          Value Ov Type  SizeObject(Section)




  BuildAttributes$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$ROPI$EBA8$UX$STANDARDLIB$REQ8$PRES8$EABIv2 0x00000000 Number   0anon$obj.o ABSOLUTE


  __ARM_use_no_argv        0x00000000 Number   0main.o ABSOLUTE


  __ARM_exceptions_init       - Undefined Weak Reference


  __alloca_initialize       - Undefined Weak Reference


  __arm_preinit_          - Undefined Weak Reference


  __cpp_initialize__aeabi_      - Undefined Weak Reference


  _terminate_alloc        - Undefined Weak Reference


  _terminate_user_alloc       - Undefined Weak Reference


  _terminateio          - Undefined Weak Reference


  __Vectors_Size         0x00000130 Number   0startup_stm32f103xe.o ABSOLUTE


  __Vectors          0x08000000 Data   4startup_stm32f103xe.o(RESET)


  __Vectors_End          0x08000130 Data   0startup_stm32f103xe.o(RESET)


  __main           0x08000131 Thumb Code 8__main.o(!!!main)


  in             0x2000001c Data   4main.o(.data)


  uin            0x20000020 Data   4main.o(.data)


  uwTick           0x20000024 Data   4stm32f1xx_hal.o(.data)


  uwTickPrio           0x20000028 Data   4stm32f1xx_hal.o(.data)


  uwTickFreq           0x2000002c Data   1stm32f1xx_hal.o(.data)








==============================================================================




Memory Map of the image




Image Entry point : 0x08000131




Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002de8, Max: 0x00080000, ABSOLUTE, COMPRESSED[0x00002da8])




  Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002b94, Max: 0x00080000, ABSOLUTE)




  Exec Addr  Load Addr  Size   Type Attr  Idx  E Section Name  Object




  0x08000000 0x08000000 0x00000130 Data RO    3  RESET     startup_stm32f103xe.o


  0x08000130 0x08000130 0x00000008 Code RO   2955* !!!main     c_w.l(__main.o)


  0x08000138 0x08000138 0x00000034 Code RO   3143  !!!scatter    c_w.l(__scatter.o)


  0x0800016c 0x0800016c 0x0000003a Code RO   3141  !!dczerorl    c_w.l(__dczerorl.o)


  0x080001a6 0x080001a6 0x00000002 PAD


  0x080001a8 0x080001a8 0x0000001c Code RO   3145  !!handler_zi  c_w.l(__scatter_zi.o)






  Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002b94, Size: 0x00008bb0, Max: 0x00010000, ABSOLUTE, COMPRESSED[0x00000214])




  Exec Addr  Load Addr  Size   Type Attr  Idx  E Section Name  Object




  0x20000000 COMPRESSED 0x00000010 Data RW   18  .data     test.o


  0x20000010 COMPRESSED 0x00000014 Data RW   78  .data     main.o


  0x20000024 COMPRESSED 0x00000009 Data RW   1481  .data     stm32f1xx_hal.o


  0x2000002d COMPRESSED 0x00000003 PAD


  0x20000030 COMPRESSED 0x00000004 Data RW   2832  .data     system_stm32f1xx.o


  0x20000034 COMPRESSED 0x00000004 PAD


  0x20000038 COMPRESSED 0x0000021c Data RW   2910  .data     debug_revice.o






==============================================================================




Image component sizes






  Code (inc. data) RO Data  RW Data  ZI Data  Debug Object Name




   172    6    0    0    0   3002 debug_function.o


   580   98    0  540   2104   3763 debug_revice.o


  36    4    0    0    0  767 gpio.o


   288   24    0   20   50 486558 main.o


  64   26  304    0  32768  820 startup_stm32f103xe.o


   152   32    0    9    0   5977 stm32f1xx_hal.o


   304   22    0    0    0  29503 stm32f1xx_hal_cortex.o


   510   10    0    0    0   1927 stm32f1xx_hal_dma.o


   832   40    0    0    0   2092 stm32f1xx_hal_gpio.o


  84    8    0    0    0  918 stm32f1xx_hal_msp.o


  1784  110    0    0    0   6112 stm32f1xx_hal_rcc.o


  1260   44    0    0    0   9974 stm32f1xx_hal_tim.o


   160   22    0    0    0   2453 stm32f1xx_hal_tim_ex.o


  1844   10    0    0    0  11460 stm32f1xx_hal_uart.o


  66   12    0    0    0   4980 stm32f1xx_it.o


   2    0   24    4    0   1155 system_stm32f1xx.o


   134   10    0   16    0   6385 test.o


   192   18    0    0   72   1702 tim.o


   220   26    0    0   68   1778 usart.o




  ----------------------------------------------------------------------


  8702  522  362  596  35068 581326 Object Totals


   0    0   32    0    0    0 (incl. Generated)


  18    0    2    7    6    0 (incl. Padding)




  ----------------------------------------------------------------------




  Code (inc. data) RO Data  RW Data  ZI Data  Debug Library Member Name




  58    0    0    0    0    0 __dczerorl.o


   8    0    0    0    0   68 __main.o


   0    0    0    0    0    0 __rtentry.o


  12    0    0    0    0    0 __rtentry2.o


   6    0    0    0    0    0 __rtentry4.o

[1] [2] [3] [4] [5]
关键字:单片机  编程思路 引用地址:一个单片机调试小工具的编程思路

上一篇:MMC中断的特点及解决方案
下一篇:SAR ADC内部结构

推荐阅读最新更新时间:2024-11-14 07:00

MSP430单片机理论复习知识点
纵观微处理器的发展,一是朝着具有复杂数据运算、高速通信、信息处理等功能的高性能计算机系统方向发展;二是产生了一种将中央处理器,存储器,I/O接口电路以及连接他们的总线都集成一块芯片上的计算机。单片机在设计上主要突出了控制功能,调整了接口配置,在单一芯片上制成了结构完整的计算机。 目前最常用的3中可编程处理器:微控制器(MCU)、微处理器(MPU)、数字信号处理器(DSP); 单片机可应用的领域:工业控制(工业机器人)、智能化仪器仪表(温度湿度的测量)、日常生活钟的电器产品(MP3)、计算机网络与通信(以太网)、计算机外部设备(微型打印机); 单片机的结构特点:时钟频率比通用MPU和DSP低;功耗低;字长一般为8-32位;内
[单片机]
单片机的定时器中断0
定时器工作的流程可以按照这个顺序(以51为例用定时器0方式一产生50毫秒的定时) 1、确定使用哪个定时器,使用哪种方式,这一步通过TMOD设置,TMOD的低四位是设置定时器0的,高四位是用来设置定时器1的,其中的M0,M1是用来设置定时器工作在哪种方式,GATE一般用不要设置,C/T是选择计数模式还是定时模式的,如:TMOD = 0X01,就说明定时器0工作在方式1。 2、接下来就要设置定时的时间,用定时器定时50毫秒,可以用这种方式TH0 = (65535 - 50000) / 256,TL0 = (65535 - 50000) % 256;可以这样理解:因为这是定时器的初值,也就是说计数脉冲就是在这个数的基础上向上递增,到达65
[单片机]
<font color='red'>单片机</font>的定时器中断0
51单片机汇编语言数字时钟
数字时钟proteus+ 51单片机+LCD1602+汇编语言+1602器件资料,适合做单片机课程结课作品 单片机汇编源程序如下: ;/******************************************************************************** ; LCD1602 时钟显示Cekong time测控何小双 ;********************************************************************************/ RS EQU P2.0; //控制端接口 R_W
[单片机]
51<font color='red'>单片机</font>汇编语言数字时钟
51单片机IO口模拟串口通讯C源程
51 IO口模拟串口通讯C源程 #include reg51.h sbit BT_SND =P1^0; sbit BT_REC =P1^1; #define MODE_QUICK #define F_TM F0 #define TIMER0_ENABLE TL0=TH0; TR0=1; #define TIMER0_DISABLE TR0=0; sbit ACC0= ACC^0; sbit ACC1= ACC^1; sbit ACC2= ACC^2; sbit ACC3= ACC^3; sbit ACC4= ACC^4; sbit ACC5= ACC^5; sbit ACC6= ACC^6; sbit ACC7= ACC^
[单片机]
单片机MCU内存分配
谈到内存,我们都会想到PC,对于单片机或者arm来说也是存在内存的,简单的理解是:内存嘛……就是存放东西的地方,只不过这个东西是数据而已,好了,还是把重点放在mcu上面,对于一款mcu来说,在性能描述的时候都会告诉sram,flash的容量大小,对于初学者来说,也不会去考虑和理会这些东西,拿到东西就只用。其实不然,这些量都是十分重要的,仔细想想,代码为什么可以运行,代码量是多少,定义的int、short等等类型的变量究竟是怎么分配和存储的,这些问题都和内寸有关系。 首先单片机的内存可以大小分为ram和rom,这里就不再解释ram和rom的区别了,我们可以将其等效为flash和sram,其中根据flash和sram的定义可得,
[单片机]
飞思卡尔推出面向软件工程师的汽车微控制器产品线S32K MCU
采用ARM Cortex 技术的新汽车架构实现了软件和硬件可扩展性,通过面向未来的特性和最佳的软件复用加快开发 2015年6月23日,德克萨斯州奥斯汀(2015年飞思卡尔技术论坛)讯-随着新汽车中芯片内容和复杂性的不断增加,未来的汽车发展对软件愈发依赖。新汽车通常集成了超过1亿行内置代码,比大多数民用客机的代码数量还要多。虽然软件带来了令人兴奋的创新机会,但同时也增加了复杂性,催生了大量的代码维护和上市速度挑战。因此,汽车电子供应商现在投入到软件领域的开发资源超过了在硬件方面的开发资源。 为了应对这些挑战,飞思卡尔半导体推出了首个旨在大大加快和简化软件开发的汽车微控制器产品线S32K。S32K基于广泛采用的
[单片机]
PIC单片机对清洁护理机的设计
引言 随着我国老龄化进程的加剧,当今社会中存在着一种因失去生活自理能力而“长期卧床的弱势群体”,特别是那些几乎无意识的弱势群体,他们需要被人长期照顾,特别是他们的大小便的清洁处理。然而由于该弱势群体数量大、护理人员紧缺和护理费用高等问题,导致这些弱势群体的家庭护理矛盾日益凸显。目前市场上的长期卧床病人大小便清洁护理机在“智能护理”方面己比较完善,已经具有大小便自动识别与回收、温水清洗与自动烘干等功能,达到了“人性化”护理的要求,但在使用过程中仍然需要专门的“陪护人员”,对于绝大多数现代家庭而言,无论从人力还是财力,这都将是一个沉重的负担,同时也限制了大小便清洁护理机在家庭中的推广使用,因此,社会迫切需要一种在现有护理功能的基础上能
[单片机]
PIC<font color='red'>单片机</font>对清洁护理机的设计
PIC单片机AD通道转换函数问题解析
  AD转换   D转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号。主要包括积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。   A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。   AD转换分类   1)积分型(如TLC7135)   积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。其优点是用简单电路就能获得高分辨率, 但缺点是由于转换精度
[单片机]
PIC<font color='red'>单片机</font>AD通道转换函数问题解析
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved