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 Kenji Arai

Please refer below link.
/users/kenjiArai/notebook/necleo-l152re-rtos-sample-also-for-f401re--f411re-/

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?

UserRevisionLine numberNew 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 }