【RT-Thread】学习笔记-01-为Keil Pack: nano msh添加串口驱动

一、需求分析

    当前项目状态较多,总线指令也持续较多,bug定位不是难事,难在主动发现bug,且原模块之间关联性较复杂,排查和改动都比较麻烦。所以决定在RTOS上重构代码。

    RTOS方案选择有uCOS, Keil RTX, Free RTOS, RT-Thread。

二、方案选择

    uCOS有稳定的主要优势,Keil RTX有开发上手简单顺畅的优势,Free RTOS是相对于uCOS有商业免费的优势,RT-Thread有完全开源免费,中文文档,更新支持活跃,以及组件丰富的优势。仅就目前需求来看,Keil RTX是最佳的选择,时间不多,它可以在最短时间内用起来,难度也最低,但是考虑到异常时方便排查,后续融合功能平台需求,也因为前期主要了解的是它,同时也看重其组件丰富,更新速度可观,先以RT-Thread作为初步方案。

    选用RT-Thread的劣势不可忽视,现有MCU为F103C8,ROM大小是第一个难点。其可靠Flash为64k,最多可用128k。现有项目已划分16k(BootLoader)+4k(Config),则Application只有44k可靠容量,最多108k。原有APP工程大小为20k,所以首先要尝试将rtt kernel + shell的大小控制在20k以内,接下来是IAP功能和软复位(boot与app互相跳转而保持io状态)的移植。

三、过程

    计划步骤:

    1.kernel + shell ROM大小控制在20k以内;

    2.iap+软复位功能实现;

    3.功能移植;

    4.稳定性评估;

    5.平台与业务功能分离:通用基础框架,编译成库便于独立维护以及作为通用工程模板;

    6.平台独立维护:细化为3个方向版本,体积小,适中,功能全;

 

    1.方案初试

        使用Keil Pack ,rtt 3.1.1,kernel + shell,额外增加串口驱动。

      a. 实现console输出接口可在最小体积下实现调试信息输出,但还无法完成 rtt 强大的msh terminal.

    void rt_hw_console_output(const char *str);

      b. 实现串口驱动接口,注册驱动

    uart_ops =
    {
        uart.init,
        uart.open,
        uart.close,
        uart.read,
        uart.write,
        uart.control,      //非必须
        uart.user_date;    //非必须
    };

    register:
        INIT_BOARD_EXPORT(rt_hw_usart_init);    //板级初始化
    (other options)
        INIT_PREV_EXPORT(comp_soft_init_fun);   //纯参数、软件一类的初始化
        INIT_DEVICE_EXPORT(dev_init_fun);       //设备初始化
        INIT_COMPONENT_EXPORT(comp_init_fun);   //组件初始化
        INIT_ENV_EXPORT(env_init_fun);          //环境初始化
        INIT_APP_EXPORT(app_init_fun);          //应用初始化

      c. 测试msh功能。

四、结果

五、总结

你可能感兴趣的:(单片机)