Debugging tool for mbed enabled microcontrollers, especially for NUCLEO-F303RE and STM32F042F6P6.

Committer:
bieleluk
Date:
Mon Jun 03 19:36:48 2019 +0000
Revision:
16:7fc964b6d127
Parent:
15:83d4dced2a28
Child:
17:5b0dd2a6b130

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bieleluk 0:e36b454cc2e6 1 #pragma once
bieleluk 0:e36b454cc2e6 2
bieleluk 12:a8ab6e018422 3 // include libraries
bieleluk 0:e36b454cc2e6 4 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 5 #include "mbed.h"
bieleluk 3:3d7837ae4a37 6 #include <stdlib.h>
bieleluk 16:7fc964b6d127 7 #include "SWO.h"
bieleluk 16:7fc964b6d127 8
bieleluk 3:3d7837ae4a37 9
bieleluk 0:e36b454cc2e6 10
bieleluk 0:e36b454cc2e6 11 // macros
bieleluk 0:e36b454cc2e6 12 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 13 #define name(var) #var
bieleluk 3:3d7837ae4a37 14 #define min(a, b) (((a) < (b)) ? (a) : (b))
bieleluk 3:3d7837ae4a37 15 #define max(a, b) (((a) > (b)) ? (a) : (b))
bieleluk 0:e36b454cc2e6 16
bieleluk 0:e36b454cc2e6 17
bieleluk 12:a8ab6e018422 18 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 19 /** Debug_serial class.
bieleluk 0:e36b454cc2e6 20 * Class for stepping programme and printing actual position of the running programme with optional print of one variable (int, float, char or char*).
bieleluk 0:e36b454cc2e6 21 * Functions printf, putc and getc are also defined in the class.
bieleluk 0:e36b454cc2e6 22 *
bieleluk 0:e36b454cc2e6 23 * Example program:
bieleluk 0:e36b454cc2e6 24 * @code
bieleluk 0:e36b454cc2e6 25 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 26 * // Author: Lukas Bielesch
bieleluk 0:e36b454cc2e6 27 * // Department of Measurement, Czech technical university in Prague, Czech Republic
bieleluk 12:a8ab6e018422 28 * // Date of publication: 13. May 2019
bieleluk 0:e36b454cc2e6 29 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 30 * #include "Debug.h"
bieleluk 9:59344a584e18 31 * AnalogIn analog(PA_4);
bieleluk 0:e36b454cc2e6 32 * PwmOut pwm(PA_6);
bieleluk 9:59344a584e18 33 * DigitalOut out(PA_5);
bieleluk 12:a8ab6e018422 34 * Debug_serial pc(PA_2, PA_3, 115200);
bieleluk 0:e36b454cc2e6 35 *
bieleluk 0:e36b454cc2e6 36 * int main(){
bieleluk 0:e36b454cc2e6 37 * int var = 0;
bieleluk 0:e36b454cc2e6 38 * char character;
bieleluk 0:e36b454cc2e6 39 * out = 1;
bieleluk 0:e36b454cc2e6 40 * float pi = 3.14159265359;
bieleluk 0:e36b454cc2e6 41 * pc.breakpoint(__LINE__,name(pi),pi);
bieleluk 0:e36b454cc2e6 42 * char* arr = "this is string";
bieleluk 0:e36b454cc2e6 43 * pc.breakpoint(__LINE__,name(arr),arr);
bieleluk 0:e36b454cc2e6 44 * pwm = 0.5;
bieleluk 0:e36b454cc2e6 45 * pwm.period(1);
bieleluk 0:e36b454cc2e6 46 * while(1){
bieleluk 0:e36b454cc2e6 47 * pc.breakpoint(__LINE__,name(var),var);
bieleluk 0:e36b454cc2e6 48 * pc.printf("insert character\n\r");
bieleluk 2:478ba8b83e3f 49 * while (!pc.readable()){}
bieleluk 0:e36b454cc2e6 50 * character = pc.getc();
bieleluk 0:e36b454cc2e6 51 * pc.printf("you have inserted %c\n\r",character);
bieleluk 0:e36b454cc2e6 52 * var++;
bieleluk 1:dbb9fcc20d07 53 * pc.breakpoint(__LINE__, 0x48000000);
bieleluk 0:e36b454cc2e6 54 * wait(1);
bieleluk 0:e36b454cc2e6 55 * }
bieleluk 0:e36b454cc2e6 56 * }
bieleluk 0:e36b454cc2e6 57 * @endcode
bieleluk 0:e36b454cc2e6 58 */
bieleluk 0:e36b454cc2e6 59 class Debug_serial {
bieleluk 0:e36b454cc2e6 60 public:
bieleluk 0:e36b454cc2e6 61
bieleluk 12:a8ab6e018422 62 /** Create object of Debug_serial class
bieleluk 12:a8ab6e018422 63 * @param tx_pin TX pin of debug serial port
bieleluk 12:a8ab6e018422 64 * @param rx_pin RX pin of debug serial port
bieleluk 12:a8ab6e018422 65 * @param baudrate(optional) desired baudrate value of debug serial port, default baudrate is 115200 Bd/s
bieleluk 0:e36b454cc2e6 66 */
bieleluk 0:e36b454cc2e6 67 Debug_serial(PinName tx_pin, PinName rx_pin, int baudrate = 115200);
bieleluk 0:e36b454cc2e6 68
bieleluk 0:e36b454cc2e6 69 /** Perform one breakpoint without printing variable
bieleluk 12:a8ab6e018422 70 * @param line_number(optional) line number of breakpoint,macro __LINE__ is recommended
bieleluk 0:e36b454cc2e6 71 */
bieleluk 0:e36b454cc2e6 72 void breakpoint(int line_number = -1);
bieleluk 0:e36b454cc2e6 73
bieleluk 0:e36b454cc2e6 74 /** Perform one breakpoint and print variable of type int
bieleluk 12:a8ab6e018422 75 * @param line_number line number of breakpoint, macro __LINE__ is recommended
bieleluk 12:a8ab6e018422 76 * @param name name of printed variable(max length is 19) , macro name(variable) is recommended
bieleluk 12:a8ab6e018422 77 * @param variable variable of type int
bieleluk 0:e36b454cc2e6 78 */
bieleluk 0:e36b454cc2e6 79 void breakpoint(int line_number, char name[20], int variable);
bieleluk 0:e36b454cc2e6 80
bieleluk 0:e36b454cc2e6 81 /** Perform one breakpoint and print variable of type char
bieleluk 12:a8ab6e018422 82 * @param line_number line number of breakpoint, macro __LINE__ is recommended
bieleluk 12:a8ab6e018422 83 * @param name name of printed variable(max length is 19) , macro name(variable) is recommended
bieleluk 12:a8ab6e018422 84 * @param variable variable of type int
bieleluk 0:e36b454cc2e6 85 */
bieleluk 0:e36b454cc2e6 86 void breakpoint(int line_number, char name[20], char variable);
bieleluk 0:e36b454cc2e6 87
bieleluk 12:a8ab6e018422 88 /** Perform one breakpoint and print string variable
bieleluk 12:a8ab6e018422 89 * @param line_number line number of breakpoint, macro __LINE__ is recommended
bieleluk 12:a8ab6e018422 90 * @param name name of printed variable(max length is 19) , macro name(variable) is recommended
bieleluk 12:a8ab6e018422 91 * @param variable variable of type char*
bieleluk 0:e36b454cc2e6 92 */
bieleluk 0:e36b454cc2e6 93 void breakpoint(int line_number, char name[20], char * variable);
bieleluk 0:e36b454cc2e6 94
bieleluk 0:e36b454cc2e6 95 /** Perform one breakpoint and print variable of type float
bieleluk 12:a8ab6e018422 96 * @param line_number line number of breakpoint, macro __LINE__ is recommended
bieleluk 12:a8ab6e018422 97 * @param name name of printed variable(max length is 19) , macro name(variable) is recommended
bieleluk 12:a8ab6e018422 98 * @param variable variable of type float
bieleluk 0:e36b454cc2e6 99 */
bieleluk 0:e36b454cc2e6 100 void breakpoint(int line_number, char name[20], float variable);
bieleluk 0:e36b454cc2e6 101
bieleluk 1:dbb9fcc20d07 102 /** Perform one breakpoint and print one register value
bieleluk 12:a8ab6e018422 103 * @param line_number line number of breakpoint, macro __LINE__ is recommended
bieleluk 12:a8ab6e018422 104 * @param address address of register, must be divisible by 4
bieleluk 1:dbb9fcc20d07 105 */
bieleluk 6:1ee26b7b9c2f 106 void breakpoint(int line_number, uint32_t address);
bieleluk 1:dbb9fcc20d07 107
bieleluk 0:e36b454cc2e6 108 /** Print formatted string to debug serial port
bieleluk 0:e36b454cc2e6 109 * @returns total number of printed characters or negative value if an output error or an encoding error
bieleluk 0:e36b454cc2e6 110 */
bieleluk 0:e36b454cc2e6 111 int printf(const char* format, ...);
bieleluk 12:a8ab6e018422 112
bieleluk 12:a8ab6e018422 113 /** Read formatted string from debug serial port
bieleluk 12:a8ab6e018422 114 * @returns total number of successfully read arguments or negative value if en error occured
bieleluk 12:a8ab6e018422 115 */
bieleluk 12:a8ab6e018422 116 int scanf(const char* format, ...);
bieleluk 0:e36b454cc2e6 117
bieleluk 0:e36b454cc2e6 118 /** Print one character to debug serial port
bieleluk 0:e36b454cc2e6 119 * @param character
bieleluk 0:e36b454cc2e6 120 * @returns character written as an unsigned char cast to an int
bieleluk 0:e36b454cc2e6 121 */
bieleluk 0:e36b454cc2e6 122 int putc(int character);
bieleluk 0:e36b454cc2e6 123
bieleluk 0:e36b454cc2e6 124 /** Read one character from debug serial port
bieleluk 0:e36b454cc2e6 125 * @returns character written as an unsigned char cast to an int
bieleluk 0:e36b454cc2e6 126 */
bieleluk 0:e36b454cc2e6 127 int getc();
bieleluk 2:478ba8b83e3f 128
bieleluk 12:a8ab6e018422 129 /** Check whether there is some character available to read from debug serial port.
bieleluk 12:a8ab6e018422 130 * @returns true when there is something available to read
bieleluk 12:a8ab6e018422 131 */
bieleluk 2:478ba8b83e3f 132 bool readable();
bieleluk 12:a8ab6e018422 133
bieleluk 12:a8ab6e018422 134 /** Check whether it is possible to write a character to debug serial port.
bieleluk 12:a8ab6e018422 135 * @returns true when it is possible to write a character to debug serial port
bieleluk 12:a8ab6e018422 136 */
bieleluk 2:478ba8b83e3f 137 bool writable();
bieleluk 2:478ba8b83e3f 138
bieleluk 0:e36b454cc2e6 139 private:
bieleluk 0:e36b454cc2e6 140 int break_line[3]; //store number of lines of three previous breakpoints
bieleluk 0:e36b454cc2e6 141 char var[3][50]; //store variables of three previous breakpoints
bieleluk 0:e36b454cc2e6 142
bieleluk 0:e36b454cc2e6 143 protected:
bieleluk 0:e36b454cc2e6 144 // objects:
bieleluk 12:a8ab6e018422 145 Serial pc; //debug serial port
bieleluk 12:a8ab6e018422 146 // variables
bieleluk 0:e36b454cc2e6 147 int breakpoint_count; //stores number of the current breakpoint
bieleluk 0:e36b454cc2e6 148 // functions
bieleluk 0:e36b454cc2e6 149 // initialization function
bieleluk 0:e36b454cc2e6 150 void init();
bieleluk 0:e36b454cc2e6 151 // print 3 last breakpoints
bieleluk 0:e36b454cc2e6 152 void print_3_breaks(int line_number);
bieleluk 0:e36b454cc2e6 153 // print one breakpoint
bieleluk 0:e36b454cc2e6 154 void print_one_break(int n);
bieleluk 0:e36b454cc2e6 155 // clear screen from m line up to n line
bieleluk 0:e36b454cc2e6 156 void clear_from_n_up_to_m(int m, int n);
bieleluk 0:e36b454cc2e6 157 };
bieleluk 0:e36b454cc2e6 158
bieleluk 12:a8ab6e018422 159 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 160
bieleluk 0:e36b454cc2e6 161 /** Debug_led class.
bieleluk 0:e36b454cc2e6 162 * Class for stepping the program with debug LED and button, that is connected to GND(default) or VCC.
bieleluk 0:e36b454cc2e6 163 *
bieleluk 0:e36b454cc2e6 164 * Example program:
bieleluk 0:e36b454cc2e6 165 * @code
bieleluk 0:e36b454cc2e6 166 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 167 * // Author: Lukas Bielesch
bieleluk 0:e36b454cc2e6 168 * // Department of Measurement, Czech technical university in Prague, Czech Republic
bieleluk 12:a8ab6e018422 169 * // Date of publication: 13. May 2019
bieleluk 0:e36b454cc2e6 170 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 171 * #include "Debug.h"
bieleluk 8:a5570452154e 172 * AnalogIn analog(PA_0);
bieleluk 0:e36b454cc2e6 173 * PwmOut pwm(PA_4);
bieleluk 8:a5570452154e 174 * DigitalOut out(PA_1);
bieleluk 0:e36b454cc2e6 175 * Debug_led deb(PA_5, PA_6, "BUTTON_VDD"); //debug led on PA5, debug button connected to VDD on PA6
bieleluk 0:e36b454cc2e6 176 * int main(){
bieleluk 0:e36b454cc2e6 177 *
bieleluk 0:e36b454cc2e6 178 * out = 1;
bieleluk 0:e36b454cc2e6 179 * deb.breakpoint(1);
bieleluk 0:e36b454cc2e6 180 * pwm = 0.5;
bieleluk 0:e36b454cc2e6 181 * pwm.period(1);
bieleluk 0:e36b454cc2e6 182 * deb.breakpoint(2);
bieleluk 0:e36b454cc2e6 183 *
bieleluk 0:e36b454cc2e6 184 * while(1){
bieleluk 0:e36b454cc2e6 185 * deb.breakpoint();
bieleluk 0:e36b454cc2e6 186 * pwm = pwm + 0.1;
bieleluk 0:e36b454cc2e6 187 * wait(2);
bieleluk 0:e36b454cc2e6 188 * }
bieleluk 0:e36b454cc2e6 189 * }
bieleluk 0:e36b454cc2e6 190 * @endcode
bieleluk 0:e36b454cc2e6 191 */
bieleluk 0:e36b454cc2e6 192 // class Debug_led
bieleluk 0:e36b454cc2e6 193 class Debug_led {
bieleluk 0:e36b454cc2e6 194 public:
bieleluk 0:e36b454cc2e6 195
bieleluk 0:e36b454cc2e6 196 /** Create object of class Debug_led
bieleluk 0:e36b454cc2e6 197 * @param led_pin pin of of debug led
bieleluk 0:e36b454cc2e6 198 * @param button_pin pin of of debug button
bieleluk 0:e36b454cc2e6 199 * @param mode mode of button connection("BUTTON_GND", "BUTTON_VCC", "BUTTON_VDD")
bieleluk 0:e36b454cc2e6 200 */
bieleluk 0:e36b454cc2e6 201 Debug_led(PinName led_pin, PinName button_pin, char mode[11] = "BUTTON_GND");
bieleluk 0:e36b454cc2e6 202
bieleluk 0:e36b454cc2e6 203 /** Perform one breakpoint
bieleluk 12:a8ab6e018422 204 * @param number(optional) number of flashes of periodic flashing of LED during the breakpoint, default is constant flashing
bieleluk 0:e36b454cc2e6 205 */
bieleluk 0:e36b454cc2e6 206 void breakpoint(int number = -1);
bieleluk 0:e36b454cc2e6 207
bieleluk 0:e36b454cc2e6 208 private:
bieleluk 0:e36b454cc2e6 209 // objects
bieleluk 0:e36b454cc2e6 210 DigitalOut led; //debug led
bieleluk 0:e36b454cc2e6 211 InterruptIn button; //debug button
bieleluk 0:e36b454cc2e6 212 // variables
bieleluk 0:e36b454cc2e6 213 int button_mode; //mode of button 1->pullupt, 0->pulldown
bieleluk 12:a8ab6e018422 214 volatile bool end_breakpoint; //true when button was pushed
bieleluk 12:a8ab6e018422 215 int number_of_breakpoints; //number of the current breakpoint
bieleluk 0:e36b454cc2e6 216
bieleluk 0:e36b454cc2e6 217 /** Initialization */
bieleluk 0:e36b454cc2e6 218 void init(char mode[11]);
bieleluk 0:e36b454cc2e6 219
bieleluk 12:a8ab6e018422 220 /** Blink the debug led n-times with blink period wait_time_ms */
bieleluk 0:e36b454cc2e6 221 void flash_n_times(int wait_time_ms, int n);
bieleluk 0:e36b454cc2e6 222
bieleluk 12:a8ab6e018422 223 /** IRQ function, end breakpoint after the button is pushed */
bieleluk 0:e36b454cc2e6 224 void end_break();
bieleluk 0:e36b454cc2e6 225 };
bieleluk 0:e36b454cc2e6 226
bieleluk 12:a8ab6e018422 227 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 228 /** Debug_register class.
bieleluk 0:e36b454cc2e6 229 *
bieleluk 0:e36b454cc2e6 230 * Example program:
bieleluk 0:e36b454cc2e6 231 * @code
bieleluk 0:e36b454cc2e6 232 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 233 * // Author: Lukas Bielesch
bieleluk 0:e36b454cc2e6 234 * // Department of Measurement, Czech technical university in Prague, Czech Republic
bieleluk 0:e36b454cc2e6 235 * // Date of publication: 15. Apr 2019
bieleluk 0:e36b454cc2e6 236 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 237 * #include "Debug.h"
bieleluk 9:59344a584e18 238 * AnalogIn analog(PA_4);
bieleluk 0:e36b454cc2e6 239 * PwmOut pwm(PA_6);
bieleluk 9:59344a584e18 240 * DigitalOut out(PA_5);
bieleluk 0:e36b454cc2e6 241 * Debug_register pc(PA_2, PA_3, 115200);
bieleluk 0:e36b454cc2e6 242 *
bieleluk 0:e36b454cc2e6 243 * int main(){
bieleluk 0:e36b454cc2e6 244 * pc.breakpoint(__LINE__,0x48000000);
bieleluk 0:e36b454cc2e6 245 * DigitalOut out2 (PA_0);
bieleluk 10:4d5f38d996e2 246 * pc.breakpoint(__LINE__,0x48000001);
bieleluk 0:e36b454cc2e6 247 * AnalogIn analog2 (PA_1);
bieleluk 6:1ee26b7b9c2f 248 * pc.breakpoint(__LINE__,0x4800000C);
bieleluk 5:e2e16ef72833 249 * DigitalIn di1(PA_7, PullUp);
bieleluk 6:1ee26b7b9c2f 250 * pc.breakpoint(__LINE__,0x4800000C);
bieleluk 6:1ee26b7b9c2f 251 * pc.breakpoint(__LINE__,0x48000004);
bieleluk 0:e36b454cc2e6 252 * while(1){
bieleluk 0:e36b454cc2e6 253 * if(pc.readable()){
bieleluk 0:e36b454cc2e6 254 * pc.putc(pc.getc());
bieleluk 0:e36b454cc2e6 255 * }
bieleluk 0:e36b454cc2e6 256 * wait(0.1);
bieleluk 0:e36b454cc2e6 257 * }
bieleluk 0:e36b454cc2e6 258 * }
bieleluk 0:e36b454cc2e6 259 * @endcode
bieleluk 0:e36b454cc2e6 260 */
bieleluk 0:e36b454cc2e6 261 class Debug_register {
bieleluk 0:e36b454cc2e6 262 public:
bieleluk 0:e36b454cc2e6 263
bieleluk 12:a8ab6e018422 264 /** Create object of Debug_register class
bieleluk 12:a8ab6e018422 265 * @param tx_pin TX pin of debug serial port
bieleluk 12:a8ab6e018422 266 * @param rx_pin RX pin of debug serial port
bieleluk 12:a8ab6e018422 267 * @param baudrate(optional) desired baudrate value of debug serial port, default baudrate is 115200 Bd/s
bieleluk 0:e36b454cc2e6 268 */
bieleluk 0:e36b454cc2e6 269 Debug_register(PinName tx_pin, PinName rx_pin, int baudrate = 115200);
bieleluk 0:e36b454cc2e6 270
bieleluk 0:e36b454cc2e6 271 /** Perform one breakpoint and print one register
bieleluk 12:a8ab6e018422 272 * @param line_number line number of breakpoint, macro __LINE__ is recommended
bieleluk 12:a8ab6e018422 273 * @param address address of register, must be divisible by 4
bieleluk 0:e36b454cc2e6 274 */
bieleluk 12:a8ab6e018422 275 void breakpoint(int line_number, uint32_t address);
bieleluk 0:e36b454cc2e6 276
bieleluk 0:e36b454cc2e6 277 /** Print formatted string to debug serial port
bieleluk 0:e36b454cc2e6 278 * @returns total number of printed characters or negative value if an output error or an encoding error
bieleluk 0:e36b454cc2e6 279 */
bieleluk 0:e36b454cc2e6 280 int printf(const char* format, ...);
bieleluk 12:a8ab6e018422 281
bieleluk 12:a8ab6e018422 282 /** Read formatted string from debug serial port
bieleluk 12:a8ab6e018422 283 * @returns total number of successfully read arguments or negative value if en error occured
bieleluk 12:a8ab6e018422 284 */
bieleluk 12:a8ab6e018422 285 int scanf(const char* format, ...);
bieleluk 0:e36b454cc2e6 286
bieleluk 0:e36b454cc2e6 287 /** Print one character to debug serial port
bieleluk 0:e36b454cc2e6 288 * @param character
bieleluk 0:e36b454cc2e6 289 * @returns character written as an unsigned char cast to an int
bieleluk 0:e36b454cc2e6 290 */
bieleluk 0:e36b454cc2e6 291 int putc(int character);
bieleluk 0:e36b454cc2e6 292
bieleluk 0:e36b454cc2e6 293 /** Read one character from debug serial port
bieleluk 0:e36b454cc2e6 294 * @returns character written as an unsigned char cast to an int
bieleluk 0:e36b454cc2e6 295 */
bieleluk 0:e36b454cc2e6 296 int getc();
bieleluk 0:e36b454cc2e6 297
bieleluk 12:a8ab6e018422 298 /** Check whether there is some character available to read from debug serial port.
bieleluk 12:a8ab6e018422 299 * @returns true when there is something available to read
bieleluk 12:a8ab6e018422 300 */
bieleluk 0:e36b454cc2e6 301 bool readable();
bieleluk 12:a8ab6e018422 302
bieleluk 12:a8ab6e018422 303 /** Check whether it is possible to write a character to debug serial port.
bieleluk 12:a8ab6e018422 304 * @returns true when it is possible to write a character to debug serial port
bieleluk 12:a8ab6e018422 305 */
bieleluk 2:478ba8b83e3f 306 bool writable();
bieleluk 0:e36b454cc2e6 307
bieleluk 0:e36b454cc2e6 308 protected:
bieleluk 0:e36b454cc2e6 309 // objects:
bieleluk 0:e36b454cc2e6 310 Serial pc; //debug serial device
bieleluk 0:e36b454cc2e6 311 // variables:
bieleluk 12:a8ab6e018422 312 int breakpoint_count; //number of the current breakpoint
bieleluk 0:e36b454cc2e6 313 // functions
bieleluk 0:e36b454cc2e6 314 // initialization function
bieleluk 0:e36b454cc2e6 315 void init();
bieleluk 0:e36b454cc2e6 316 // clear screen from m line up to n line
bieleluk 0:e36b454cc2e6 317 void clear_from_n_up_to_m(int m, int n);
bieleluk 15:83d4dced2a28 318 // modify actual address or register value according to position in terminal
bieleluk 3:3d7837ae4a37 319 uint32_t modify_value(uint32_t value, int horizontal);
bieleluk 15:83d4dced2a28 320 // print address and register value
bieleluk 15:83d4dced2a28 321 void print_break(uint32_t address);
bieleluk 15:83d4dced2a28 322 // print number in binary form
bieleluk 15:83d4dced2a28 323 void print_binary(uint32_t value);
bieleluk 0:e36b454cc2e6 324 };
bieleluk 3:3d7837ae4a37 325
bieleluk 12:a8ab6e018422 326 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 327 /** Debug_register_print class.
bieleluk 0:e36b454cc2e6 328 *
bieleluk 0:e36b454cc2e6 329 * Example program:
bieleluk 0:e36b454cc2e6 330 * @code
bieleluk 0:e36b454cc2e6 331 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 332 * // Author: Lukas Bielesch
bieleluk 0:e36b454cc2e6 333 * // Department of Measurement, Czech technical university in Prague, Czech Republic
bieleluk 0:e36b454cc2e6 334 * // Date of publication: 15. Apr 2019
bieleluk 0:e36b454cc2e6 335 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 336 * #include "Debug.h"
bieleluk 9:59344a584e18 337 * AnalogIn analog(PA_4);
bieleluk 0:e36b454cc2e6 338 * PwmOut pwm(PA_6);
bieleluk 9:59344a584e18 339 * DigitalOut out(PA_5);
bieleluk 0:e36b454cc2e6 340 * Debug_register_print pc(PA_2, PA_3, 115200);
bieleluk 0:e36b454cc2e6 341 *
bieleluk 0:e36b454cc2e6 342 * int main(){
bieleluk 0:e36b454cc2e6 343 * pc.format(2,2,1,3);//breakpoint count,line number, address, value
bieleluk 10:4d5f38d996e2 344 * pc.breakpoint(__LINE__,0x48000001, 2);
bieleluk 0:e36b454cc2e6 345 * DigitalOut out2 (PA_0);
bieleluk 6:1ee26b7b9c2f 346 * pc.breakpoint(__LINE__,0x48000014, -3);
bieleluk 0:e36b454cc2e6 347 * AnalogIn analog2 (PA_1);
bieleluk 6:1ee26b7b9c2f 348 * pc.breakpoint(__LINE__,0x48000008);
bieleluk 0:e36b454cc2e6 349 *
bieleluk 0:e36b454cc2e6 350 * while(1){
bieleluk 0:e36b454cc2e6 351 * wait(1);
bieleluk 0:e36b454cc2e6 352 * }
bieleluk 0:e36b454cc2e6 353 * }
bieleluk 0:e36b454cc2e6 354 * @endcode
bieleluk 0:e36b454cc2e6 355 */
bieleluk 0:e36b454cc2e6 356 class Debug_register_print {
bieleluk 0:e36b454cc2e6 357 public:
bieleluk 0:e36b454cc2e6 358
bieleluk 12:a8ab6e018422 359 /** Create object of Debug_register_print class
bieleluk 12:a8ab6e018422 360 * @param tx_pin TX pin of debug serial port
bieleluk 12:a8ab6e018422 361 * @param rx_pin RX pin of debug serial port
bieleluk 12:a8ab6e018422 362 * @param baudrate(optional) desired baudrate value of debug serial port, default baudrate is 115200 Bd/s
bieleluk 0:e36b454cc2e6 363 */
bieleluk 0:e36b454cc2e6 364 Debug_register_print(PinName tx_pin, PinName rx_pin, int baudrate = 115200);
bieleluk 0:e36b454cc2e6 365
bieleluk 12:a8ab6e018422 366 /** Set format of breakpoint message
bieleluk 12:a8ab6e018422 367 * @param break_number format of number of actual breakpoint: 0->not show, 1->show in hexadecimal, 2->show in decimal(default)
bieleluk 12:a8ab6e018422 368 * @param line format of line of actual breakpoint: 0->not show, 1->show in hexadecimal, 2->show in decimal(default)
bieleluk 12:a8ab6e018422 369 * @param address format of address of register: 0->not show, 1->show in hexadecimal(default), 2->show in decimal
bieleluk 12:a8ab6e018422 370 * @param value format of register value: 0->not show, 1->show in hexadecimal, 2->show in decimal, 3->show in binary(default)
bieleluk 12:a8ab6e018422 371 */
bieleluk 12:a8ab6e018422 372 void format(int break_number = 2, int line = 2, int address = 1, int value = 3);
bieleluk 0:e36b454cc2e6 373
bieleluk 12:a8ab6e018422 374 /** Perform one breakpoint and print one register value
bieleluk 12:a8ab6e018422 375 * @param line_number line number of breakpoint, macro __LINE__ is recommended
bieleluk 12:a8ab6e018422 376 * @param address address of register , must be divisible by 4
bieleluk 0:e36b454cc2e6 377 */
bieleluk 12:a8ab6e018422 378 void breakpoint(int line_number, uint32_t address, int number_of_words = 1);
bieleluk 0:e36b454cc2e6 379
bieleluk 0:e36b454cc2e6 380
bieleluk 0:e36b454cc2e6 381 protected:
bieleluk 0:e36b454cc2e6 382 // objects:
bieleluk 0:e36b454cc2e6 383 Serial pc; //debug serial device
bieleluk 0:e36b454cc2e6 384 // variables:
bieleluk 12:a8ab6e018422 385 int breakpoint_count; //number of the current breakpoint
bieleluk 12:a8ab6e018422 386 int count_format; // format of breakpoint count, 0->not show, 1->show in hexadecimal, 2->show in decimal
bieleluk 12:a8ab6e018422 387 int line_format; // format of lineof breakpoint, 0->not show, 1->show in hexadecimal, 2->show in decimal
bieleluk 12:a8ab6e018422 388 int address_format; // format of address of register, 0->not show, 1->show in hexadecimal, 2->show in decimal
bieleluk 12:a8ab6e018422 389 int register_format;// format of register value, 0->not show, 1->show in hexadecimal, 2->show in decimal, 3->show in binary
bieleluk 0:e36b454cc2e6 390 // functions
bieleluk 0:e36b454cc2e6 391 // initialization function
bieleluk 0:e36b454cc2e6 392 void init();
bieleluk 0:e36b454cc2e6 393
bieleluk 16:7fc964b6d127 394 };
bieleluk 16:7fc964b6d127 395
bieleluk 16:7fc964b6d127 396 //------------------------------------------------------------------------------------------------------------------
bieleluk 16:7fc964b6d127 397 /** Debug_swo class.
bieleluk 16:7fc964b6d127 398 *
bieleluk 16:7fc964b6d127 399 * Example program:
bieleluk 16:7fc964b6d127 400 * @code
bieleluk 16:7fc964b6d127 401 * // ----------------------------------------------------------------------------
bieleluk 16:7fc964b6d127 402 * // Author: Lukas Bielesch
bieleluk 16:7fc964b6d127 403 * // Department of Measurement, Czech technical university in Prague, Czech Republic
bieleluk 16:7fc964b6d127 404 * // Date of publication: 15. Apr 2019
bieleluk 16:7fc964b6d127 405 * // ----------------------------------------------------------------------------
bieleluk 16:7fc964b6d127 406 * #include "Debug.h"
bieleluk 16:7fc964b6d127 407 * AnalogIn analog(PA_4);
bieleluk 16:7fc964b6d127 408 * PwmOut pwm(PA_6);
bieleluk 16:7fc964b6d127 409 * DigitalOut out(PA_5);
bieleluk 16:7fc964b6d127 410 * Debug_swo pc;
bieleluk 16:7fc964b6d127 411 *
bieleluk 16:7fc964b6d127 412 * int main(){
bieleluk 16:7fc964b6d127 413 * pc.format(2,2,1,3);//breakpoint count,line number, address, value
bieleluk 16:7fc964b6d127 414 * pc.breakpoint(__LINE__,0x48000001, 2);
bieleluk 16:7fc964b6d127 415 * DigitalOut out2 (PA_0);
bieleluk 16:7fc964b6d127 416 * pc.breakpoint(__LINE__,0x48000014, -3);
bieleluk 16:7fc964b6d127 417 * AnalogIn analog2 (PA_1);
bieleluk 16:7fc964b6d127 418 * pc.breakpoint(__LINE__,0x48000008);
bieleluk 16:7fc964b6d127 419 *
bieleluk 16:7fc964b6d127 420 * while(1){
bieleluk 16:7fc964b6d127 421 * wait(1);
bieleluk 16:7fc964b6d127 422 * }
bieleluk 16:7fc964b6d127 423 * }
bieleluk 16:7fc964b6d127 424 * @endcode
bieleluk 16:7fc964b6d127 425 */
bieleluk 16:7fc964b6d127 426 class Debug_swo {
bieleluk 16:7fc964b6d127 427 public:
bieleluk 16:7fc964b6d127 428
bieleluk 16:7fc964b6d127 429 /** Create object of Debug_swo class
bieleluk 16:7fc964b6d127 430 */
bieleluk 16:7fc964b6d127 431 Debug_swo();
bieleluk 16:7fc964b6d127 432
bieleluk 16:7fc964b6d127 433 /** Set format of breakpoint message
bieleluk 16:7fc964b6d127 434 * @param break_number format of number of actual breakpoint: 0->not show, 1->show in hexadecimal, 2->show in decimal(default)
bieleluk 16:7fc964b6d127 435 * @param line format of line of actual breakpoint: 0->not show, 1->show in hexadecimal, 2->show in decimal(default)
bieleluk 16:7fc964b6d127 436 * @param address format of address of register: 0->not show, 1->show in hexadecimal(default), 2->show in decimal
bieleluk 16:7fc964b6d127 437 * @param value format of register value: 0->not show, 1->show in hexadecimal, 2->show in decimal, 3->show in binary(default)
bieleluk 16:7fc964b6d127 438 */
bieleluk 16:7fc964b6d127 439 void format(int break_number = 2, int line = 2, int address = 1, int value = 3);
bieleluk 16:7fc964b6d127 440
bieleluk 16:7fc964b6d127 441 /** Perform one breakpoint and print one register value
bieleluk 16:7fc964b6d127 442 * @param line_number line number of breakpoint, macro __LINE__ is recommended
bieleluk 16:7fc964b6d127 443 * @param address address of register , must be divisible by 4
bieleluk 16:7fc964b6d127 444 */
bieleluk 16:7fc964b6d127 445 void breakpoint(int line_number, uint32_t address, int number_of_words = 1);
bieleluk 16:7fc964b6d127 446
bieleluk 16:7fc964b6d127 447
bieleluk 16:7fc964b6d127 448 protected:
bieleluk 16:7fc964b6d127 449 // objects:
bieleluk 16:7fc964b6d127 450 SWO_Channel pc; //debug serial device
bieleluk 16:7fc964b6d127 451 // variables:
bieleluk 16:7fc964b6d127 452 int breakpoint_count; //number of the current breakpoint
bieleluk 16:7fc964b6d127 453 int count_format; // format of breakpoint count, 0->not show, 1->show in hexadecimal, 2->show in decimal
bieleluk 16:7fc964b6d127 454 int line_format; // format of lineof breakpoint, 0->not show, 1->show in hexadecimal, 2->show in decimal
bieleluk 16:7fc964b6d127 455 int address_format; // format of address of register, 0->not show, 1->show in hexadecimal, 2->show in decimal
bieleluk 16:7fc964b6d127 456 int register_format;// format of register value, 0->not show, 1->show in hexadecimal, 2->show in decimal, 3->show in binary
bieleluk 16:7fc964b6d127 457 // functions
bieleluk 16:7fc964b6d127 458 // initialization function
bieleluk 16:7fc964b6d127 459 void init();
bieleluk 16:7fc964b6d127 460
bieleluk 0:e36b454cc2e6 461 };