2025年4月19日土曜日

4357_Firmware_Essential | Mbed Shell

 To: All Participants

From: Sheng-Liang Song

/*
 * mbed Serial PC interface
 *  - a simple mbed Shell program
 *      UART: input and put examples
 */
 
#include "mbed.h"
DigitalOut myled(LED_GREEN);
Serial pc(USBTX,USBRX);
char command[256];

int help(char* cmd);
int md(char* cmd);
int mm(char* cmd);
unsigned int addr, len, val;

int main(void) {
    int rc=0;
    int i=0;
    int run=1;
    pc.baud(115200);
    help(NULL);
    while (run) {
        wait(0.5);
        pc.printf("\r\nmbed %d %% ",i);
        while(rc==0) {
            if (pc.readable()) {
                rc= pc.scanf("%s", command);    
                
                if (!strcmp("help", command)) {
                    help(command);
                }
                else if (!strcmp("stop", command)) {
                    run = 0;
                }
                else if(!strcmp("md",  command)) {
                     pc.scanf("%X %X", &addr, &len);
                     md(command);
                }
                else if(!strcmp("mm", command)) {
                     pc.scanf("%X %X", &addr, &val);
                     mm(command);
                }
                else
                {
                    pc.printf("\r\nrc:%d please add handle function for cmd[%s]!", rc, command);
                }
            }
        }
        rc=0;
        i++;
        myled = !myled;
    }
    return rc;
}

int help(char* cmd)
{
char banner[] =     
"\r\n#     #  #####   #####   #####        #     # ######  ####### ###### "
"\r\n#     # #     # #     # #     #       ##   ## #     # #       #     #"
"\r\n#     # #       #       #             # # # # #     # #       #     #"
"\r\n#     # #        #####  #             #  #  # ######  #####   #     #"
"\r\n#     # #             # #             #     # #     # #       #     #"
"\r\n#     # #     # #     # #     #       #     # #     # #       #     #"
"\r\n #####   #####   #####   #####        #     # ######  ####### ###### "
;
    pc.printf("\r\n%s\r\n\r\nWelcome to mbed World!\r\n==> Please select: TermTerm->Setup->Terminal->[]local echo\r\n", banner);
    pc.printf("\r\nbanner: 0x%08X command: 0x%08X help: 0x:%08X main:%08X\r\n", banner, command, help, main);
    return 0;
}

int md(char* cmd)
{
   unsigned int* p =(unsigned int*) addr;
   unsigned int i;
   pc.printf("\r\nmd addr:%08X len:%04X\r\n", addr, len);
   for(i=0; i<len; i+=4) {
    pc.printf("\r\n%08X: %08X %08X %08X %08X",  &p[i], p[i+0], p[i+1], p[i+2], p[i+3]);
   }
   return 0;
}

int mm(char* mm)
{
   unsigned int* p =(unsigned int*) addr;
   pc.printf("\r\nmd addr:%08X val:%04X\r\n", addr, *p);
   *p = val;
   pc.printf("\r\nmd addr:%08X val:%04X\r\n", addr, *p);
   return 0;
}
 

0 件のコメント:

コメントを投稿