Debugging tool for mbed enabled microcontrollers, especially for NUCLEO-F303RE and STM32F042F6P6.
debug_register_print.cpp@3:3d7837ae4a37, 2019-05-06 (annotated)
- Committer:
- bieleluk
- Date:
- Mon May 06 21:16:37 2019 +0000
- Revision:
- 3:3d7837ae4a37
- Parent:
- 0:e36b454cc2e6
- Child:
- 6:1ee26b7b9c2f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bieleluk | 0:e36b454cc2e6 | 1 | #include "Debug.h" |
bieleluk | 0:e36b454cc2e6 | 2 | |
bieleluk | 0:e36b454cc2e6 | 3 | // create object of class Debug_register |
bieleluk | 0:e36b454cc2e6 | 4 | //------------------------------------------------------------------------------------------------------------------ |
bieleluk | 0:e36b454cc2e6 | 5 | Debug_register_print::Debug_register_print(PinName tx_pin, PinName rx_pin, int baudrate) : pc(tx_pin,rx_pin, baudrate) { |
bieleluk | 0:e36b454cc2e6 | 6 | init(); |
bieleluk | 0:e36b454cc2e6 | 7 | } |
bieleluk | 0:e36b454cc2e6 | 8 | |
bieleluk | 0:e36b454cc2e6 | 9 | // init function |
bieleluk | 0:e36b454cc2e6 | 10 | //------------------------------------------------------------------------------------------------------------------ |
bieleluk | 0:e36b454cc2e6 | 11 | void Debug_register_print::init() { |
bieleluk | 0:e36b454cc2e6 | 12 | pc.printf("\ec"); |
bieleluk | 0:e36b454cc2e6 | 13 | wait_ms(50); |
bieleluk | 0:e36b454cc2e6 | 14 | breakpoint_count=0; |
bieleluk | 0:e36b454cc2e6 | 15 | count_format = 2; //binary |
bieleluk | 0:e36b454cc2e6 | 16 | line_format = 2; //binary |
bieleluk | 0:e36b454cc2e6 | 17 | address_format = 1; //hexa |
bieleluk | 0:e36b454cc2e6 | 18 | register_format = 1; //hexa |
bieleluk | 0:e36b454cc2e6 | 19 | |
bieleluk | 0:e36b454cc2e6 | 20 | } |
bieleluk | 0:e36b454cc2e6 | 21 | |
bieleluk | 0:e36b454cc2e6 | 22 | |
bieleluk | 0:e36b454cc2e6 | 23 | |
bieleluk | 0:e36b454cc2e6 | 24 | |
bieleluk | 0:e36b454cc2e6 | 25 | // perform one breakpoint and print one register |
bieleluk | 0:e36b454cc2e6 | 26 | //------------------------------------------------------------------------------------------------------------------ |
bieleluk | 3:3d7837ae4a37 | 27 | void Debug_register_print::breakpoint(int line_number, uint32_t address, uint32_t offset, int number_of_words){ |
bieleluk | 0:e36b454cc2e6 | 28 | |
bieleluk | 3:3d7837ae4a37 | 29 | address += offset; |
bieleluk | 3:3d7837ae4a37 | 30 | address -= address%4; |
bieleluk | 0:e36b454cc2e6 | 31 | |
bieleluk | 0:e36b454cc2e6 | 32 | breakpoint_count++; |
bieleluk | 0:e36b454cc2e6 | 33 | |
bieleluk | 3:3d7837ae4a37 | 34 | for (int i = 0; i < abs(number_of_words); i++){ |
bieleluk | 3:3d7837ae4a37 | 35 | |
bieleluk | 3:3d7837ae4a37 | 36 | if( count_format == 1){ |
bieleluk | 3:3d7837ae4a37 | 37 | pc.printf("Break no. 0x%3x ",breakpoint_count); |
bieleluk | 3:3d7837ae4a37 | 38 | }else if( count_format == 2){ |
bieleluk | 3:3d7837ae4a37 | 39 | pc.printf("Break no. %3d ",breakpoint_count); |
bieleluk | 3:3d7837ae4a37 | 40 | } |
bieleluk | 3:3d7837ae4a37 | 41 | |
bieleluk | 3:3d7837ae4a37 | 42 | if( line_format == 1){ |
bieleluk | 3:3d7837ae4a37 | 43 | pc.printf("Line no. 0x%3x ",line_number); |
bieleluk | 3:3d7837ae4a37 | 44 | }else if( line_format == 2){ |
bieleluk | 3:3d7837ae4a37 | 45 | pc.printf("Line no. %3d ",line_number); |
bieleluk | 3:3d7837ae4a37 | 46 | } |
bieleluk | 0:e36b454cc2e6 | 47 | |
bieleluk | 3:3d7837ae4a37 | 48 | if( address_format == 1){ |
bieleluk | 3:3d7837ae4a37 | 49 | pc.printf("Address 0x%8x ", address); |
bieleluk | 3:3d7837ae4a37 | 50 | }else if( address_format == 2){ |
bieleluk | 3:3d7837ae4a37 | 51 | pc.printf("Address %10u ", address); |
bieleluk | 3:3d7837ae4a37 | 52 | } |
bieleluk | 3:3d7837ae4a37 | 53 | |
bieleluk | 3:3d7837ae4a37 | 54 | uint32_t reg = read_word(address, 0); |
bieleluk | 3:3d7837ae4a37 | 55 | |
bieleluk | 3:3d7837ae4a37 | 56 | if( register_format == 1){ |
bieleluk | 3:3d7837ae4a37 | 57 | pc.printf("Value 0x%8x ", reg); |
bieleluk | 3:3d7837ae4a37 | 58 | }else if( register_format == 2){ |
bieleluk | 3:3d7837ae4a37 | 59 | pc.printf("Value %10u ", reg); |
bieleluk | 3:3d7837ae4a37 | 60 | }else if( register_format == 3){ |
bieleluk | 3:3d7837ae4a37 | 61 | pc.printf("Value "); |
bieleluk | 3:3d7837ae4a37 | 62 | for (int i = 0; i < 32; i++){ |
bieleluk | 3:3d7837ae4a37 | 63 | if (i%4 == 0) pc.printf(" "); |
bieleluk | 3:3d7837ae4a37 | 64 | pc.printf("%d",reg >> (31 - i)); |
bieleluk | 3:3d7837ae4a37 | 65 | reg -= ((reg >> (31 - i)) << (31 - i)); |
bieleluk | 3:3d7837ae4a37 | 66 | } |
bieleluk | 3:3d7837ae4a37 | 67 | } |
bieleluk | 3:3d7837ae4a37 | 68 | pc.printf("\n\r"); |
bieleluk | 3:3d7837ae4a37 | 69 | if (number_of_words > 0){ |
bieleluk | 3:3d7837ae4a37 | 70 | address += 4; |
bieleluk | 3:3d7837ae4a37 | 71 | }else{ |
bieleluk | 3:3d7837ae4a37 | 72 | address -= 4; |
bieleluk | 3:3d7837ae4a37 | 73 | } |
bieleluk | 3:3d7837ae4a37 | 74 | |
bieleluk | 0:e36b454cc2e6 | 75 | } |
bieleluk | 0:e36b454cc2e6 | 76 | |
bieleluk | 0:e36b454cc2e6 | 77 | |
bieleluk | 0:e36b454cc2e6 | 78 | |
bieleluk | 0:e36b454cc2e6 | 79 | } |
bieleluk | 0:e36b454cc2e6 | 80 | |
bieleluk | 0:e36b454cc2e6 | 81 | void Debug_register_print::format(int break_number, int line, int address, int value){ |
bieleluk | 0:e36b454cc2e6 | 82 | |
bieleluk | 0:e36b454cc2e6 | 83 | count_format = break_number; //binay |
bieleluk | 0:e36b454cc2e6 | 84 | line_format = line; //binary |
bieleluk | 0:e36b454cc2e6 | 85 | address_format = address; //hexa |
bieleluk | 0:e36b454cc2e6 | 86 | register_format = value; //hexa |
bieleluk | 0:e36b454cc2e6 | 87 | |
bieleluk | 0:e36b454cc2e6 | 88 | } |