最近看了幾篇嵌入式命令行交互工具的推文,全文介紹和開(kāi)源托管平臺(tái)基本一致,感覺(jué)就像是在水文章;今天摸魚的時(shí)候移植用了一下,為后續(xù)項(xiàng)目開(kāi)發(fā)搭建一個(gè)交互,方便后續(xù)參數(shù)調(diào)試和硬件調(diào)試,開(kāi)源鏈接如下:
https://gitee.com/nrush/nr_micro_shell
| 移植準(zhǔn)備
1、去托管平臺(tái)把源碼下下來(lái);
2、準(zhǔn)備一個(gè)基礎(chǔ)工程,實(shí)現(xiàn)串口重定義輸出:
| 移植源碼
1、把核心源碼復(fù)制到工程中:
2、把命令示例源碼復(fù)制到工程中:
3、把源碼添加到工程中:
4、屏蔽RT-Thread 的頭文件:
5、修改輸出的末尾行模式:
6、初始化nr_micro_shell:
#include "gd32f10x.h"
#include "stdio.h"
#include "nr_micro_shell.h"
// uart配置
void hal_log_init(void)
{
/* 使GPIO時(shí)鐘 */
rcu_periph_clock_enable(RCU_GPIOA);
/* 使USART時(shí)鐘 */
rcu_periph_clock_enable(RCU_USART0);
/* 連接端口到USARTx_Tx */
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
/* 連接端口到USARTx_Rx */
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
/* USART配置 */
usart_deinit(USART0); /*!< 復(fù)位外設(shè)USART */
usart_word_length_set(USART0, USART_WL_8BIT); /*!< 配置USART字長(zhǎng) */
usart_stop_bit_set(USART0, USART_STB_1BIT); /*!< 配置USART停止位 */
usart_parity_config(USART0, USART_PM_NONE); /*!< 配置USART奇偶校驗(yàn) */
usart_baudrate_set(USART0, 115200U); /*!< 配置USART波特率 */
usart_receive_config(USART0, USART_RECEIVE_ENABLE); /*!< USART/UART接收器配置 */
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); /*!< USART/UART發(fā)送器配置 */
usart_enable(USART0); /*!< 使能USART */
/*中斷管理器使能,并分配優(yōu)先級(jí)*/
nvic_irq_enable(USART0_IRQn, 1, 0);
/*清除中斷標(biāo)志*/
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_IDLE);
/* 使能串口中斷 */
usart_interrupt_enable(USART0, USART_INT_RBNE); /*!< 接收不為空中斷 */
}
// usart0中斷
void USART0_IRQHandler(void)
{
if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE))
{
/* 清除標(biāo)志位 */
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);
/* 接收數(shù)據(jù)(注意) */
shell(usart_data_receive(USART0));
}
}
//printf重定向函數(shù)
int fputc(int ch,FILE *f)
{
usart_data_transmit(USART0, (uint8_t)ch); //發(fā)送一字節(jié)數(shù)據(jù)
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); //等待發(fā)送完成
return ch;
}
// 外設(shè)初始化
void hal_device_init(void)
{
hal_log_init();
/* 初始化 */
shell_init();
}
// 主循環(huán)
int main(void)
{
// 設(shè)置優(yōu)先級(jí)組
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);
// 外設(shè)初始化
hal_device_init();
while (1)
{
}
}
7、查看效果:
| 定義指令
1、添加自定義指令代碼:
2、查看效果:
| 最終效果
移植成功后就可以在MCU中體驗(yàn)Linux的shell命令那種感覺(jué),注意一定要修改輸出的末尾行模式,不然會(huì)不能正常使用,來(lái)感受一下最終效果:
最終的效果還是不錯(cuò)的,和Linux的體驗(yàn)類似,感興趣的同學(xué)可以移植來(lái)體驗(yàn)一下MCU級(jí)別的shell命令交互;
--END--
閱讀 225
-
移植
+關(guān)注
關(guān)注
1文章
391瀏覽量
28467 -
參數(shù)調(diào)試
+關(guān)注
關(guān)注
0文章
5瀏覽量
5020 -
硬件調(diào)試
+關(guān)注
關(guān)注
1文章
10瀏覽量
10793
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
在STM32實(shí)現(xiàn)命令行
Linux命令行的基本使用
Linux命令行怎么使用
在單片機(jī)上實(shí)現(xiàn)shell命令行交互的方法
caxa命令行中的應(yīng)用
Xilinx軟件命令行工具:XSCT開(kāi)發(fā)和調(diào)試
Xilinx軟件命令行工具進(jìn)行開(kāi)發(fā)和調(diào)試
使用串口登錄嵌入式Linux設(shè)備命令行的方法

學(xué)習(xí)筆記(02):嵌入式Linux開(kāi)發(fā)基礎(chǔ)-shell命令使用

評(píng)論