This is sample program for Nucleo L152RE (and F401RE & F411RE) mbed-rtos. You need to modify mbed-src and mbed-rtos before compile it.
Dependencies: mbed-rtos mbed-src SetRTC
Fork of GR-PEACH_test_on_rtos_works_well by
Please refer below link.
/users/kenjiArai/notebook/necleo-l152re-rtos-sample-also-for-f401re--f411re-/
debug_tools_L152_F4x1RE/mon_hw_mem.h@13:d0d1da1fae4c, 2015-05-20 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed May 20 10:49:02 2015 +0000
- Revision:
- 13:d0d1da1fae4c
- Parent:
- 10:1c0f58b9c048
change L152 System clock (PLL VCO=96MHz) ->32MHz Clock
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 10:1c0f58b9c048 | 1 | /* |
kenjiArai | 10:1c0f58b9c048 | 2 | * Monitor program / Memory control part |
kenjiArai | 10:1c0f58b9c048 | 3 | * |
kenjiArai | 10:1c0f58b9c048 | 4 | * Copyright (c) 2010-2015 Kenji Arai / JH1PJL |
kenjiArai | 10:1c0f58b9c048 | 5 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 10:1c0f58b9c048 | 6 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 10:1c0f58b9c048 | 7 | * Separated: October 13th, 2014 from mon_hw.cpp |
kenjiArai | 10:1c0f58b9c048 | 8 | * Revised: May 16th, 2015 |
kenjiArai | 10:1c0f58b9c048 | 9 | * |
kenjiArai | 10:1c0f58b9c048 | 10 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 10:1c0f58b9c048 | 11 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 10:1c0f58b9c048 | 12 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 10:1c0f58b9c048 | 13 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 10:1c0f58b9c048 | 14 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 10:1c0f58b9c048 | 15 | */ |
kenjiArai | 10:1c0f58b9c048 | 16 | |
kenjiArai | 10:1c0f58b9c048 | 17 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 10:1c0f58b9c048 | 18 | // Control Program |
kenjiArai | 10:1c0f58b9c048 | 19 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 10:1c0f58b9c048 | 20 | // Range check for Memory dump |
kenjiArai | 10:1c0f58b9c048 | 21 | static void check_range( MEMO * mem ) |
kenjiArai | 10:1c0f58b9c048 | 22 | { |
kenjiArai | 10:1c0f58b9c048 | 23 | uint8_t i; |
kenjiArai | 10:1c0f58b9c048 | 24 | uint32_t m; |
kenjiArai | 10:1c0f58b9c048 | 25 | |
kenjiArai | 10:1c0f58b9c048 | 26 | mem->mflg = ERR_NOTHING; |
kenjiArai | 10:1c0f58b9c048 | 27 | for ( i = 0 ; i < 5 ; i++ ) { |
kenjiArai | 10:1c0f58b9c048 | 28 | if ( mem->mstr >= mem_range[i][0]) { |
kenjiArai | 10:1c0f58b9c048 | 29 | if ( mem->mstr < mem_range[i][1] ) { |
kenjiArai | 10:1c0f58b9c048 | 30 | m = mem->mstr + mem->msiz; |
kenjiArai | 10:1c0f58b9c048 | 31 | if ( m < mem_range[i][1]) { |
kenjiArai | 10:1c0f58b9c048 | 32 | return; // no modification |
kenjiArai | 10:1c0f58b9c048 | 33 | } else { |
kenjiArai | 10:1c0f58b9c048 | 34 | m = mem_range[i][1]; |
kenjiArai | 10:1c0f58b9c048 | 35 | mem->msiz = m - mem->mstr + 1; |
kenjiArai | 10:1c0f58b9c048 | 36 | mem->mflg = ERR_MODIFY_SIZ; |
kenjiArai | 10:1c0f58b9c048 | 37 | return; // modified size |
kenjiArai | 10:1c0f58b9c048 | 38 | } |
kenjiArai | 10:1c0f58b9c048 | 39 | } |
kenjiArai | 10:1c0f58b9c048 | 40 | } |
kenjiArai | 10:1c0f58b9c048 | 41 | } |
kenjiArai | 10:1c0f58b9c048 | 42 | mem->mflg = ERR_OUT_OF_RANGE; |
kenjiArai | 10:1c0f58b9c048 | 43 | mem->mstr = 0; |
kenjiArai | 10:1c0f58b9c048 | 44 | mem->msiz = 0; |
kenjiArai | 10:1c0f58b9c048 | 45 | return ; |
kenjiArai | 10:1c0f58b9c048 | 46 | } |
kenjiArai | 10:1c0f58b9c048 | 47 | |
kenjiArai | 10:1c0f58b9c048 | 48 | // Memory dump error massage |
kenjiArai | 10:1c0f58b9c048 | 49 | void error_print ( unsigned char flg ) |
kenjiArai | 10:1c0f58b9c048 | 50 | { |
kenjiArai | 10:1c0f58b9c048 | 51 | switch (flg) { |
kenjiArai | 10:1c0f58b9c048 | 52 | case ERR_MODIFY_SIZ : |
kenjiArai | 10:1c0f58b9c048 | 53 | put_r(); |
kenjiArai | 10:1c0f58b9c048 | 54 | PRINTF("Reach to out of range"); |
kenjiArai | 10:1c0f58b9c048 | 55 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 56 | break; |
kenjiArai | 10:1c0f58b9c048 | 57 | case ERR_OUT_OF_RANGE : |
kenjiArai | 10:1c0f58b9c048 | 58 | put_r(); |
kenjiArai | 10:1c0f58b9c048 | 59 | PRINTF("Not in a memory area"); |
kenjiArai | 10:1c0f58b9c048 | 60 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 61 | break; |
kenjiArai | 10:1c0f58b9c048 | 62 | case ERR_NOTHING : |
kenjiArai | 10:1c0f58b9c048 | 63 | default : |
kenjiArai | 10:1c0f58b9c048 | 64 | ; |
kenjiArai | 10:1c0f58b9c048 | 65 | } |
kenjiArai | 10:1c0f58b9c048 | 66 | } |
kenjiArai | 10:1c0f58b9c048 | 67 | |
kenjiArai | 10:1c0f58b9c048 | 68 | // Print memory contents |
kenjiArai | 10:1c0f58b9c048 | 69 | void put_dump (const unsigned char *buff, unsigned long ofs, int cnt) |
kenjiArai | 10:1c0f58b9c048 | 70 | { |
kenjiArai | 10:1c0f58b9c048 | 71 | int n; |
kenjiArai | 10:1c0f58b9c048 | 72 | |
kenjiArai | 10:1c0f58b9c048 | 73 | PRINTF("%08lX ", ofs); |
kenjiArai | 10:1c0f58b9c048 | 74 | for(n = 0; n < cnt; n++) { // show hex |
kenjiArai | 10:1c0f58b9c048 | 75 | PRINTF(" %02X", buff[n]); |
kenjiArai | 10:1c0f58b9c048 | 76 | } |
kenjiArai | 10:1c0f58b9c048 | 77 | for(; n < 16; n++) { // fullfil remained space |
kenjiArai | 10:1c0f58b9c048 | 78 | PRINTF(" "); |
kenjiArai | 10:1c0f58b9c048 | 79 | } |
kenjiArai | 10:1c0f58b9c048 | 80 | PUTC(' '); |
kenjiArai | 10:1c0f58b9c048 | 81 | for(n = 0; n < cnt; n++) { // show char |
kenjiArai | 10:1c0f58b9c048 | 82 | if ((buff[n] < 0x20)||(buff[n] >= 0x7F)) { |
kenjiArai | 10:1c0f58b9c048 | 83 | PUTC('.'); |
kenjiArai | 10:1c0f58b9c048 | 84 | } else { |
kenjiArai | 10:1c0f58b9c048 | 85 | PUTC(buff[n]); |
kenjiArai | 10:1c0f58b9c048 | 86 | } |
kenjiArai | 10:1c0f58b9c048 | 87 | } |
kenjiArai | 10:1c0f58b9c048 | 88 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 89 | } |
kenjiArai | 10:1c0f58b9c048 | 90 | |
kenjiArai | 10:1c0f58b9c048 | 91 | // dump memory with error check |
kenjiArai | 10:1c0f58b9c048 | 92 | void dump_w_err_ckeck ( char **ptr, MEMO * mem ) |
kenjiArai | 10:1c0f58b9c048 | 93 | { |
kenjiArai | 10:1c0f58b9c048 | 94 | check_range (mem); |
kenjiArai | 10:1c0f58b9c048 | 95 | for (*ptr=(char*)mem->mstr; mem->msiz >= 16; *ptr += 16, mem->msiz -= 16) { |
kenjiArai | 10:1c0f58b9c048 | 96 | put_r(); |
kenjiArai | 10:1c0f58b9c048 | 97 | put_dump((unsigned char*)*ptr, (unsigned int)*ptr, 16); |
kenjiArai | 10:1c0f58b9c048 | 98 | } |
kenjiArai | 10:1c0f58b9c048 | 99 | if (mem->msiz) { |
kenjiArai | 10:1c0f58b9c048 | 100 | put_dump((unsigned char*)*ptr, (unsigned int)*ptr, mem->msiz); |
kenjiArai | 10:1c0f58b9c048 | 101 | } |
kenjiArai | 10:1c0f58b9c048 | 102 | error_print(mem->mflg); |
kenjiArai | 10:1c0f58b9c048 | 103 | } |
kenjiArai | 10:1c0f58b9c048 | 104 | |
kenjiArai | 10:1c0f58b9c048 | 105 | static void mem_inf (char *ptr) |
kenjiArai | 10:1c0f58b9c048 | 106 | { |
kenjiArai | 10:1c0f58b9c048 | 107 | put_r(); |
kenjiArai | 10:1c0f58b9c048 | 108 | PRINTF("Mem. Mode d <address> [<count>], s, <ret> or f, q, ?"); |
kenjiArai | 10:1c0f58b9c048 | 109 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 110 | mem.mstr = mem_range[0][0]; // default start address = Flash |
kenjiArai | 10:1c0f58b9c048 | 111 | mem.msiz =256; |
kenjiArai | 10:1c0f58b9c048 | 112 | mem.mold = 0; |
kenjiArai | 10:1c0f58b9c048 | 113 | mem.mtmp = 0; |
kenjiArai | 10:1c0f58b9c048 | 114 | mem.mflg = 0; |
kenjiArai | 10:1c0f58b9c048 | 115 | for (; mem.mflg != 0xff;) { |
kenjiArai | 10:1c0f58b9c048 | 116 | PRINTF("m>"); |
kenjiArai | 10:1c0f58b9c048 | 117 | ptr = linebuf; |
kenjiArai | 10:1c0f58b9c048 | 118 | get_line(ptr, buf_size); |
kenjiArai | 10:1c0f58b9c048 | 119 | put_r(); |
kenjiArai | 10:1c0f58b9c048 | 120 | switch(*ptr++) { |
kenjiArai | 10:1c0f58b9c048 | 121 | case 'd' : // d <address> [<count>] - Dump memory |
kenjiArai | 10:1c0f58b9c048 | 122 | mem.mtmp = mem.mstr; |
kenjiArai | 10:1c0f58b9c048 | 123 | if (!xatoi(&ptr, &mem.mstr)) { |
kenjiArai | 10:1c0f58b9c048 | 124 | mem.mstr = mem.mtmp; |
kenjiArai | 10:1c0f58b9c048 | 125 | } |
kenjiArai | 10:1c0f58b9c048 | 126 | if (!xatoi(&ptr, &mem.msiz)) { |
kenjiArai | 10:1c0f58b9c048 | 127 | mem.msiz = 256; |
kenjiArai | 10:1c0f58b9c048 | 128 | } |
kenjiArai | 10:1c0f58b9c048 | 129 | mem.mtmp = mem.msiz; |
kenjiArai | 10:1c0f58b9c048 | 130 | dump_w_err_ckeck(&ptr, &mem); |
kenjiArai | 10:1c0f58b9c048 | 131 | mem.mold = mem.mstr; |
kenjiArai | 10:1c0f58b9c048 | 132 | mem.mstr += mem.mtmp; |
kenjiArai | 10:1c0f58b9c048 | 133 | break; |
kenjiArai | 10:1c0f58b9c048 | 134 | case 'f' : // next |
kenjiArai | 10:1c0f58b9c048 | 135 | case 'n' : |
kenjiArai | 10:1c0f58b9c048 | 136 | case 0x0d : |
kenjiArai | 10:1c0f58b9c048 | 137 | mem.msiz = 256; |
kenjiArai | 10:1c0f58b9c048 | 138 | mem.mtmp = mem.msiz; |
kenjiArai | 10:1c0f58b9c048 | 139 | dump_w_err_ckeck(&ptr, &mem); |
kenjiArai | 10:1c0f58b9c048 | 140 | mem.mold = mem.mstr; |
kenjiArai | 10:1c0f58b9c048 | 141 | mem.mstr += 256; |
kenjiArai | 10:1c0f58b9c048 | 142 | break; |
kenjiArai | 10:1c0f58b9c048 | 143 | case 'q' : // quit |
kenjiArai | 10:1c0f58b9c048 | 144 | mem.mflg = 0xff; |
kenjiArai | 10:1c0f58b9c048 | 145 | break; |
kenjiArai | 10:1c0f58b9c048 | 146 | case 'b' : // Back to more |
kenjiArai | 10:1c0f58b9c048 | 147 | if (mem.mold == 0) { |
kenjiArai | 10:1c0f58b9c048 | 148 | ; |
kenjiArai | 10:1c0f58b9c048 | 149 | } else { |
kenjiArai | 10:1c0f58b9c048 | 150 | mem.mold -= 256; |
kenjiArai | 10:1c0f58b9c048 | 151 | } |
kenjiArai | 10:1c0f58b9c048 | 152 | case 'k' : // keep previous address |
kenjiArai | 10:1c0f58b9c048 | 153 | mem.mstr = mem.mold; |
kenjiArai | 10:1c0f58b9c048 | 154 | mem.msiz = 256; |
kenjiArai | 10:1c0f58b9c048 | 155 | mem.mtmp = mem.msiz; |
kenjiArai | 10:1c0f58b9c048 | 156 | dump_w_err_ckeck(&ptr, &mem); |
kenjiArai | 10:1c0f58b9c048 | 157 | mem.mstr += 256; |
kenjiArai | 10:1c0f58b9c048 | 158 | break; |
kenjiArai | 10:1c0f58b9c048 | 159 | case 'a' : // start RAM top |
kenjiArai | 10:1c0f58b9c048 | 160 | #if defined(TARGET_NUCLEO_L152RE) |
kenjiArai | 10:1c0f58b9c048 | 161 | mem.mstr = mem_range[4][0]; |
kenjiArai | 10:1c0f58b9c048 | 162 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 10:1c0f58b9c048 | 163 | mem.mstr = mem_range[3][0]; |
kenjiArai | 10:1c0f58b9c048 | 164 | #elif defined(TARGET_LPC1768) |
kenjiArai | 10:1c0f58b9c048 | 165 | mem.mstr = mem_range[1][0]; |
kenjiArai | 10:1c0f58b9c048 | 166 | #elif defined(TARGET_LPC1114) |
kenjiArai | 10:1c0f58b9c048 | 167 | mem.mstr = mem_range[1][0]; |
kenjiArai | 10:1c0f58b9c048 | 168 | #else |
kenjiArai | 10:1c0f58b9c048 | 169 | #error "target cpu does NOT support" |
kenjiArai | 10:1c0f58b9c048 | 170 | #endif |
kenjiArai | 10:1c0f58b9c048 | 171 | mem.msiz =256; |
kenjiArai | 10:1c0f58b9c048 | 172 | mem.mold = 0; |
kenjiArai | 10:1c0f58b9c048 | 173 | mem.mtmp = 0; |
kenjiArai | 10:1c0f58b9c048 | 174 | mem.mflg = 0; |
kenjiArai | 10:1c0f58b9c048 | 175 | dump_w_err_ckeck(&ptr, &mem); |
kenjiArai | 10:1c0f58b9c048 | 176 | mem.mstr += 256; |
kenjiArai | 10:1c0f58b9c048 | 177 | break; |
kenjiArai | 10:1c0f58b9c048 | 178 | case 'o' : // start ROM top |
kenjiArai | 10:1c0f58b9c048 | 179 | mem.mstr = mem_range[0][0]; |
kenjiArai | 10:1c0f58b9c048 | 180 | mem.msiz =256; |
kenjiArai | 10:1c0f58b9c048 | 181 | mem.mold = 0; |
kenjiArai | 10:1c0f58b9c048 | 182 | mem.mtmp = 0; |
kenjiArai | 10:1c0f58b9c048 | 183 | mem.mflg = 0; |
kenjiArai | 10:1c0f58b9c048 | 184 | dump_w_err_ckeck(&ptr, &mem); |
kenjiArai | 10:1c0f58b9c048 | 185 | mem.mstr += 256; |
kenjiArai | 10:1c0f58b9c048 | 186 | break; |
kenjiArai | 10:1c0f58b9c048 | 187 | case 's' : |
kenjiArai | 10:1c0f58b9c048 | 188 | PRINTF("Memory Configuration"); |
kenjiArai | 10:1c0f58b9c048 | 189 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 190 | PRINTF("%s0x%08lx to 0x%08lx ", rmsg0, mem_range[0][0], mem_range[0][1]); |
kenjiArai | 10:1c0f58b9c048 | 191 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 192 | PRINTF("%s0x%08lx to 0x%08lx ", rmsg1, mem_range[1][0], mem_range[1][1]); |
kenjiArai | 10:1c0f58b9c048 | 193 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 194 | PRINTF("%s0x%08lx to 0x%08lx ", rmsg2, mem_range[2][0], mem_range[2][1]); |
kenjiArai | 10:1c0f58b9c048 | 195 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 196 | PRINTF("%s0x%08lx to 0x%08lx ", rmsg3, mem_range[3][0], mem_range[3][1]); |
kenjiArai | 10:1c0f58b9c048 | 197 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 198 | PRINTF("%s0x%08lx to 0x%08lx ", rmsg4, mem_range[4][0], mem_range[4][1]); |
kenjiArai | 10:1c0f58b9c048 | 199 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 200 | #if defined(TARGET_NUCLEO_L152RE) |
kenjiArai | 10:1c0f58b9c048 | 201 | PRINTF("%s0x%08lx to 0x%08lx ", rmsg5, mem_range[5][0], mem_range[5][1]); |
kenjiArai | 10:1c0f58b9c048 | 202 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 203 | #endif |
kenjiArai | 10:1c0f58b9c048 | 204 | break; |
kenjiArai | 10:1c0f58b9c048 | 205 | case '?' : |
kenjiArai | 10:1c0f58b9c048 | 206 | PRINTF("d <address> [<count>] - Dump memory"); |
kenjiArai | 10:1c0f58b9c048 | 207 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 208 | PRINTF("s - Show memory structure "); |
kenjiArai | 10:1c0f58b9c048 | 209 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 210 | PRINTF("o - Dump memory / start from ROM top"); |
kenjiArai | 10:1c0f58b9c048 | 211 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 212 | PRINTF("a - Dump memory / start from RAM top"); |
kenjiArai | 10:1c0f58b9c048 | 213 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 214 | PRINTF("k - Dump memory / keep same 256bytes"); |
kenjiArai | 10:1c0f58b9c048 | 215 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 216 | PRINTF("b - Dump memory / before 256bytes"); |
kenjiArai | 10:1c0f58b9c048 | 217 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 218 | PRINTF("<RET> or f, n - Dump memory / next 256bytes"); |
kenjiArai | 10:1c0f58b9c048 | 219 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 220 | PRINTF("q - Exit memory mode"); |
kenjiArai | 10:1c0f58b9c048 | 221 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 222 | break; |
kenjiArai | 10:1c0f58b9c048 | 223 | default: |
kenjiArai | 10:1c0f58b9c048 | 224 | PUTC('?'); |
kenjiArai | 10:1c0f58b9c048 | 225 | put_rn(); |
kenjiArai | 10:1c0f58b9c048 | 226 | } |
kenjiArai | 10:1c0f58b9c048 | 227 | } |
kenjiArai | 10:1c0f58b9c048 | 228 | PRINTF("Return to All Mode"); |
kenjiArai | 10:1c0f58b9c048 | 229 | } |