嵌入式命令列操作(可移植性)

2021-08-28 19:56:38 字數 1785 閱讀 9147

本文件基於stm32f103並移植到f407, msp430,以及s3c2440

最終效果如下:

以上多餘列印是除錯時解析bug用的,可以去除。

typedef void (*cli_handler)();

struct cmd_tbl_s ;

typedef struct cmd_tbl_s cmd_tbl_t;

#define register_cmd(name,maxargs,handler,usage) \

const cmd_tbl_t strcmd_##name __attribute__ ((section ("cmd"))) =

int uart_tstc(void)

u8 uart_getc(void)

定義乙個全域性陣列,儲存串列埠資訊

char console_buffer[256];

static int index = 0; /* buffer index */

資料獲取和解析

void cmdline_run(void)}}

}

再看show_prompt

#define def_prompt		"cmd:>"

void show_prompt()

run_command:

void run_command(const char *cmdbuf)

*dest = '\0';

dest = destline;

if(*dest == '\0') // invalid

return;

argc = parse_line(dest, argv); /* 解析引數,去掉空格 */

if(true == check_cmd((const char *)argv[0], &cmd)) /* 判斷命令字是否定義 */

// excute the handler

switch(argc)

}else

}

static bool check_cmd(const char *name, cmd_tbl_t **cmd)

}return found;

}

解析引數parse_line

int parse_line (char *line, char *argv)

if (*line == '\0')

argv[nargs++] = line; /* begin of argument string */

/* find end of string */

while (*line && (*line != ' ') && (*line != '\t'))

if (*line == '\0')

*line++ = '\0'; /* terminate current arg */

} printf ("** too many args (max. %d) **\r\n", max_args_cnt);

return (nargs);

}

嵌入式可移植性程式設計的一些例子

多數情況下,編寫完全可移植的程式 是不可能的。因為同樣的資料型別在不同的編譯環境下所產生的結果 obj 可能是不同的,特別是針對嵌入式系統,不同的執行平台可能要求不同的 來實現它所要求的獨特功能。為了增加程式 可移植到多個平台的可行性,比較好的方法是提供乙個可移植的資料或功能介面,讓那些移植的部分隱...

嵌入式目錄操作命令

1.echo 命令作用 在顯示器上顯示一段文字,一般起到乙個提示的作用 補充說明 echo會將輸入的字串送往標準輸出。輸出的字串間以空白字元隔開,並在最後加上換行號。命令語法 echo 選項 引數 常用選項 e 允許下面列出的加反斜線轉義的字元進行解釋 n 換行符 f 換頁符 t 水平製表符 v 縱...

嵌入式實時作業系統的移植 !

所謂移植,就是使選用的實時核心能在某個特定的微處理器上執行。為了方便移植,大部分的實時作業系統 是用c語言編寫的,但仍需要用c和組合語言編寫一些與微處理器相關的 這是因為有一些操作只能通過組合語言來實現。由於所有的實時作業系統在設計時就已經充分考慮了可移植性,所以移植相對來說是比較容易的。以ucos...