本文件基於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...