Изображаем терминал
- Войдите на сайт для отправки комментариев
Пнд, 17/02/2020 - 01:50
Моя первая программка для nano :) Можно прямо в терминале, например putty, смотреть ram/flash/eeprom и писать в ram (включая i/o, то есть мигать любимым светодиодом). Сдампил бутлоадер "7800 800 r", подсунул на http://disassembler.io/, медитирую
char input[20]; byte inputLength = 0; void setup() { Serial.begin (57600); Serial.write('>'); } void loop() { int v = Serial.read(); if ((v == '\b' || v == 0x7F) && inputLength > 0) { --inputLength; Serial.print("\b \b"); } else if(v == '\r' && inputLength > 0) { Serial.print("\r\n"); input[inputLength] = 0; process(); inputLength = 0; Serial.print("\r\n>"); } else if (v >= ' ' && v < 0x7F && inputLength < sizeof(input) - 1) { input[inputLength++] = v; Serial.write(v); } } void process() { char *p = input; word addr = getHex(p), len = getHex(p); if (*p != 'r' && *p != 'f' && *p != 'w' && *p != 'e' || p[1]) { Serial.print("addr count r|f|e: dump ram|flash|eeprom\r\naddr value w: write to ram\r\n"); return; } if (*p == 'w') { *(byte*)addr = (byte)len; return; } for (word i = 0; i < len; ++i) { byte value = *p == 'f' ? __LPM(addr) : *p == 'e' ? eeprom_read_byte((byte*)addr) : *(byte*)addr; Serial.write(hex(value >> 4)); Serial.write(hex(value)); Serial.print(i % 32 == 31 ? "\r\n" : " "); ++addr; } } word getHex(char *&p) { word result = 0; while(*p >= '0' && *p <= '9' || *p >= 'A' && *p <= 'F' || *p >= 'a' && *p <= 'f') { result = result * 16 + (*p <= '9' ? *p - '0' : *p % 16 + 9); ++p; } while(*p == ' ') ++p; return result; } char hex(byte value) { value &= 15; return value < 10 ? '0' + value : 'a' + value - 10; }
>7800 100 f 0c 94 34 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 0c 94 51 3c 11 24 1f be cf ef d8 e0 de bf cd bf 11 e0 a0 e0 b1 e0 ec e9 ff e7 02 c0 05 90 0d 92 a2 30 b1 07 d9 f7 12 e0 a2 e0 b1 e0 01 c0 1d 92 ad 30 b1 07 e1 f7 0e 94 2d 3d 0c 94 cc 3f 0c 94 00 3c 98 2f 95 95 95 95 95 95 95 95 90 5d 8f 70 8a 30 7c f0 28 2f 29 5a 80 91 c0 00 85 ff fc cf 90 93 c6 00 80 91 c0 00 85 ff fc cf 20 93 c6 00 08 95 28 2f 20 5d f0 cf 98 2f 80 91 c0 00 85 ff fc cf 90 93 c6 00 08 95 ef 92 ff 92 0f 93 1f 93 ee 24 ff 24 87 01 80 91 c0 00 87 fd >0 20 e ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 55 ff ff ff ff ff ff ff ff ff ff ff ff ff >0 40 r 60 00 40 50 53 49 20 20 62 01 00 00 40 00 00 00 10 00 72 bf 01 00 20 01 18 00 81 01 f9 08 1e 00 b8 b8 b8 20 20 20 00 00 00 01 00 01 b8 b8 b8 b8 b8 b8 b8 b8 b8 06 07 07 b8 b8 b8 00 00 00 00 00 >25 20 w >
Только не терминал, а монитор.) Какая то обратная польская запись у вас - обычно сначала команда, а затем параметры (от, до). И дамп покрасивше желательно - слева адрес и разделители кратные 4, не?