Mini-F0121-OB开发板评测--移植FreeRTOS+NR_Micro_Shell

分享作者:xhackerustc
评测品牌:灵动微电子
评测型号:Mini-F0121-OB
发布时间:2025-01-13 11:12:58
0
概要
Mini-F0121-OB开发板移植FreeRTOS+NR_Micro_Shell
开源口碑分享内容

灵动微电子的Mini-F0121-OB开发板基于MM32F0121C6P,cpu是cortex-m0,频率可达72MHZ,flash有64KB,sram有8KB,这个资源够跑一

个RTOS了。笔者本来准备移植Nuttx的,但是移植后发现Nuttx的资源占用稍微多了些,主要剩余sram不多了,所以笔者立马切换到了Fre

eRTOS上,顺手还移植了nr_micro_shell。


MM32F0120的Library下载和点灯

在移植RTOS之前,最好能把官方的固件Library跑起来,点灯验证一下。笔者用的版本是MM32F0120_V0.11.3,应该是最新的。用这个固

件Library点灯就不详述了,网上有很多文章。


FreeRTOS的准备

这个移植也是比较简单,从FreeRTOS官网下载最新的FreeRTOS,把它放到middleware/FreeRTOS/目录下备用


nr_micro_shell的准备

从gitee或者github下载,同样放到middleware/nr_micro_shell目录下备用。


CMakeLists.txt的书写

笔者用cmake作为构建工具,toolchain利用arm-none-eabi-gcc,全命令行环境;) CMakeLists.txt的书写其实很简单,基本有固定套路,无非就是设置交叉编译器、头文件目录、源代码位置以及链接器脚本。笔者的CMakeLists.txt完整内容如下


shell任务的实现

根据nr_micro_shell的说明,移植使用它挺简单的,首先调用shell_init()初始化,然后对于每个输入字符调用shell()处理即可。因为我们是OS环境,所以比较起一个FreeRTOS任务调用shell()处理比较合适。而串口输入字符的获得,是通过串口中断程序读写UART寄存器获得的,再通过FreeRTOS的消息队列发送给shell任务处理。


串口中断处理程序如下:

void USART1_IRQHandler(void)
{
        uint8_t rxdata;
        BaseType_t xHigherPriorityTaskWoken = pdFALSE;

        if (RESET != USART_GetITStatus(USART1, USART_IT_RXNE)) {
                rxdata = USART_ReceiveData(USART1);
                xQueueSendFromISR(rx_queue, &rxdata, &xHigherPriorityTaskWoken);
                if(xHigherPriorityTaskWoken == pdTRUE)
                        portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
        }
}


shell任务实现如下:

static void task_shell(void const *argument)
{
        unsigned char ch;

        while (1) {
                if (xQueueReceive(rx_queue, &ch, portMAX_DELAY))
                        shell(ch);
        }
}

我们可以看到,shell任务唯一动作就是从消息队列中获得数据然后作为参数调用shell()函数。


一些cmd的实现

最后笔者利用FreeRTOS的一些原语实现了msleep、uptime、free、ps、top等linux下常见命令,比如msleep命令就是利用vTaskDelay函

数实现的,uptime命令就是调用xTaskGetTickCount()函数,free命令就是调用vPortGetHeapStats()获得堆的统计信息然后打印出来,p

s命令就是利用vTaskList()函数实现的,top命令就是利用vTaskGetRunTimeStats()函数实现。除此以外还实现了一些像echo、md(读内

存)、mw(写内存)等基本命令。这些shell cmd再拓展拓展就是一个完整可用类unix操作环境了:)


最后附上演示视频供欣赏: https://www.bilibili.com/video/BV1i6cgeJE6d/


全部评论
暂无评论
0/144