无OS的MCU开发神器——CodeBrick框架,让你的嵌入式开发更高效!

引言

在嵌入式开发中,MCU(微控制器单元)的应用非常广泛,尤其是在资源受限的环境中,如何高效地管理任务、降低功耗、简化调试流程成为了开发者们关注的焦点。今天,我们要介绍的是一个无OS的MCU实用软件框架——CodeBrick,它通过模块化设计和自定义段技术,大大提升了代码的可维护性和开发效率。

CodeBrick框架简介

CodeBrick是一个专为无操作系统的MCU设计的实用软件框架,包含了任务轮询管理、命令管理器、低功耗管理、环形缓冲区等实用模块。它的核心思想是通过模块化设计,减少各个模块之间的耦合,使得代码更加清晰、易于维护。

主要功能

  • 模块自动化管理:支持不同优先级的初始化接口,模块化管理更加灵活。

  • 任务轮询管理:通过简单的宏声明即可实现任务轮询,无需复杂的调用。

  • 低功耗管理:支持休眠与唤醒通知,有效降低系统功耗。

  • 命令行解析:支持命令注册与执行,方便在线调试和参数配置。

  • Blink设备支持:统一管理LED、震动马达、蜂鸣器等具有闪烁特性的设备。

使用说明

CodeBrick框架的开发平台基于STM32F401RET6 MCU,支持IAR 7.4和Keil MDK 4.72A IDE。下面我们将详细介绍如何使用CodeBrick框架进行开发。

任务初始化及任务轮询管理

在使用CodeBrick框架时,首先需要系统提供滴答定时器,用于驱动任务轮询作业。通过简单的宏声明,即可实现任务的初始化和轮询管理。

// 定时器中断(提供系统滴答)
void SysTick_Handler(void)
{
    systick_increase(SYS_TICK_INTERVAL); // 增加系统节拍
}

// 注册初始化入口及任务
static void key_init(void)
{
    /*do something*/
}

static void key_scan(void)
{
    /*do something*/
}

module_init("key", key_init);              // 注册按键初始化接口
driver_register("key", key_scan, 20);      // 注册按键任务(20ms轮询1次)

命令管理器(CLI)

CodeBrick框架内置了命令行解析功能,用户可以通过串口输出命令行控制设备行为、查询设备状态等。系统默认提供了两条命令:?help,用于列出当前系统包含的命令列表。

// 命令行任务初始化
static void cli_task_init(void)
{
    cli_port_t p = {tty.write, tty.read};           // 读写接口
    cli_init(&cli, &p);                             // 初始化命令行对象
    cli_enable(&cli);
    cli_exec_cmd(&cli,"sysinfo");                   // 显示系统信息
}

// 命令行任务处理
static void cli_task_process(void)
{
    cli_process(&cli);
}

module_init("cli", cli_task_init);                  
task_register("cli", cli_task_process, 10);          // 注册命令行任务

低功耗管理器(PM)

CodeBrick框架支持低功耗管理,通过轮询系统中各个模块是否可以允许系统进入低功耗状态。所有模块都具有“一票否决权”,即只要有一个模块不允许休眠,系统就不会进入休眠状态。

// 低功耗适配器
typedef struct {
    unsigned int max_sleep_time;  // 系统最大休眠时长(ms)
    unsigned int (*goto_sleep)(unsigned int time);  // 进入休眠状态
} pm_adapter_t;

void pm_init(const pm_adapter_t *adt);
void pm_enable(void);
void pm_disable(void);
void pm_process(void);
Blink模块

Blink模块

Blink模块用于管理具有闪烁特性的设备,如LED、震动马达、蜂鸣器等。通过简单的接口调用,即可实现设备的闪烁控制。

// LED驱动
blink_dev_t led;                             // 定义led设备

static void led_ctrl(int on)
{
    if (on)
        GPIOA->ODR |= (1 << 8);
    else 
        GPIOA->ODR &= ~(1 << 8);
}

void led_init(void)
{
    led_io_init(void);                  // led io初始化
    blink_dev_create(&led, led_ctrl);   // 创建led设备
    blink_dev_ctrl(&led, 50, 100, 0);   // 快闪(50ms亮, 100ms灭)
}

按键管理模块

按键管理模块通过系统滴答时钟和任务轮询,实现了按键的短按、长按等事件的处理。

key_t key;                             // 定义按键管理器

void key_event(int type, unsigned int duration)
{
    if (type == KEY_PRESS) {                // 短按
    } else if (type == KEY_LONG_DOWN) {     // 长按
    }
} 

int read_key(void)
{
    return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == Bit_RESET;
}

void key_init(void)
{
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    gpio_conf(GPIOA, GPIO_Mode_IN, GPIO_PuPd_NOPULL, GPIO_Pin_8); 
    key_create(&key, read_key, key_event);  // 创建1个按键
}

CodeBrick框架通过模块化设计和自定义段技术,极大地简化了无OS的MCU开发流程。无论是任务管理、低功耗控制,还是命令行调试,CodeBrick都提供了简洁高效的解决方案。如果你正在寻找一个能够提升开发效率的MCU框架,不妨试试CodeBrick,相信它会为你的嵌入式开发带来全新的体验!


关注我,获取更多嵌入式开发干货!如果你有任何问题或建议,欢迎在评论区留言,我们会尽快回复你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值