APM32-----裸机移植NR_MICRO_SHELL

文章讲述了在APM32F030R8芯片上进行裸机开发时,如何移植和配置NR_MICRO_SHELL以实现类似rt-thread的shell功能。作者详细介绍了从获取源码、修改宏定义、解决编译错误,到初始化shell和实现串口中断处理的全过程,并解决了输入无反馈和TAB崩溃的问题。
摘要由CSDN通过智能技术生成

一、前言

        因为项目需求需要使用APM32F030R8该款芯片开发产品,因为rom(64k)和ram(8k)不多,所以使用了裸机开发,为了更好的调试,达到rt-thread  finsh那种效果,我在网上查找到了一个开源比较小的shell(NR_MICRO_SHELL),也可以达到rt-thread,shell的效果,所以我决定移植他到我的程序上面。

        NR_MICRO_SHELL开源代码获取地址:https://gitee.com/nrush/nr_micro_shell

二、移植过程

        1、在git仓库获取到源码,其目录分布如下:

                

         2、将inc 文件夹 和 src文件夹的源文件和头文件移植到自己的工程文件下,分布如下:

                

        3、在工程内添加好头文件路径,开始编译,会出现编译错误,不要慌,因为 开源文件默认少了一个宏,这个需要自己定义。

                在nr_micro_shell_config.h这个头文件中,可以根据自己需求配置,具体意义看文件注释。

               根据错误,自己需要重新定义 NR_MICRO_SHELL_SIMULATOR 这个宏。具体如下

                                ​​​​​​​        

                再次编译就没有错误了,接下来我们将nr_micro_shell初始化。shell需要使用uart驱动配置此处不声明,根据自己需求配置。

        4、在初始化之前,在nr_micro_shell_config.h配置文件,如下。

                

         这个宏配置的是指令是以空格结尾还是换行结尾有效,因为我用的是Xshell5,所以将其配置为1 \r结尾,根据自己的需求配置。

          

         将上面shell_printf宏 改成自己的printf 打印,到此我们配置完成了,可以开始初始化了。

        5、初始化,我们只需要在main文件加入shell_init(),这个初始化宏即可,到此nr_micro_shell就可以输出了,我们可以添加几行调试代码,如下。                

int main(void)
{
    unsigned int i = 0;
    //匹配好结束符配置 NR_SHELL_END_OF_LINE 0
    char test_line[] = "test 1 2 3\n"
    /* 初始化 */
    shell_init();
    
    /* 初步测试代码 */
    for(i = 0; i < sizeof(test_line)-1; i++)
    {
        shell(test_line[i]);
    }

    /* 正式工作代码 */
    while(1)
    {
        if(USART GET A CHAR 'c')
        {
            /* nr_micro_shell接收字符 */
            shell(c);
        }
    }
}

                结果如下,证明初始化成功。

        

         6、实现交互,需要串口接收中断函数调用shell()这个宏(根据自己程序,在串口接收中断函数处接收数据,传递给shell()这个宏,也可以使用轮询的机制),具体代码如下:

                        

    

三、遇到小问题

        1、在xshell终端输入指令,nr_micro_shell没有反馈回来指令字母,需要完成一条指令按回车才有反馈,输入指令过程中没有反馈,查看了一下源码,需要在此处修改一下代码,如下。

        

        将上面NR_MICRO_SHELL_SIMULATOR这个宏判断去掉。        

        2、在使用TAB键补充的时候,会出现程序崩溃,需要在TAB处理函数处加入一下代码

    

        解决以上两个问题后,NR_MICRO_SHELL就可以正常使用了。0.0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值