# plum **Repository Path**: jack998/plum ## Basic Information - **Project Name**: plum - **Description**: plum是跨平台开发利器,在硬件上,plum提供HAL层来对各种MCU进行接口抽象,在操作系统上,plum提供KAL层对多种操作协同进行抽象。同时plum也提供了各种各样的软件组件与硬件驱动,这些驱动均与开发平台无关,不管是基于单片机的产品还是操作系统之上的应用,都可以无缝切换。 - **Primary Language**: C - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-03-31 - **Last Updated**: 2025-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # plum开发框架 ## 项目目的 在产品开发过程中,由于硬件设计与嵌入式软件开发的进度严重不匹配,往往是软件开发已经完成一部分功能后,硬件还处在设计过程中,这就对软件形成了一定的桎梏。同时,为了更加友好的对软件设计的功能进行调试,采用软件与硬件分离的思想,先在其它芯片平台上调试应用层功能,再移植到对应的目标板运行,从而降低开发难度,加快开发进度。 同时,实现以下愿景: 1. 规范各个软件模块API的命名规则 2. 将相同功能的一些常用库进行接口统一,便于移植替换 3. 不同模块间相互独立,不同层级之间完全解耦,便于二次使用 4. 通过可视化操作对plum进行剪裁 ## 目录结构 ~~~ . ├── CMakeLists.txt ├── LICENSE ├── SConscript ├── cmake plum交叉编译脚本 ├── core plum 内核源码 │ ├── CMakeLists.txt │ ├── cal plum 内核组件 │ ├── hal plum 硬件抽象层 │ ├── hardware 硬件驱动 │ ├── kal 操作系统内核抽象层 │ ├── kernel plum 内核 │ ├── plum_api.h │ └── thirdparty 三方库 ├── examples plum 例程 ├── file_format.c 源文件组织格式 ├── file_format.h 头文件组织格式 ├── format.sh 项目格式化脚本 ├── readme.md ├── Makefile ├── Kconfig └── tools ├── produce 生产工具 └── kconfig kconfig工具 ~~~ ## 一. plum介绍 1. hal(Hardware Abstraction Layer) ​硬件抽象层。负责为各种芯片外设接口做二次API统一,接口API在`hal/include`下,不同芯片都实现API定义的相同功能,更换芯片平台时通过`menuconfig`选择hal下对应的芯片平台即可自动切换芯片驱动。切换芯片平台对plum来说,只是在hal这层的实现存在区别,接口API保持不变。 2. kal(Kernel Abstraction Layer) ​内核抽象层。负责实现各种操作系统的线程间通讯,接口API在`kal/include`下,不同的操作系统需要kal不同的platform层实现。kal这层虚拟各种操作系统,因此,用户对操作系统是无感的。 3. cal(Component Abstraction Layer) plum内核组件抽象层。虚拟plum内核使用到的固有组件,如CLI、vfs、mqtt、http等。 4. thirdparty 组件 第三方软件包。 5. hardware ​硬件驱动集。统一所有驱动设备的接口,无需应用层对设备初始化,底层通过export方式注册驱动。 6. kernel ​plum内核。 ## 二. 使用方法 ### Linux环境 1. 通过menuconfig工具选择需要的组件。 ~~~~~~~~~~shell make menuconfig ~~~~~~~~~~ ![pwd1](doc/jpg/menuconfig_main.jpg) 2. 在examples目录下建立自己的test工程目录,并在test目录下创建CMakeLists.txt文件,在CMakeLists.txt文件中将core作为头文件路径包含进去。 ~~~~~~~~~~~shell mkdir example/test touch example/test/CMakeLists.txt echo add_subdirectory(test) >> example/CMakeLists.txt ~~~~~~~~~~~ 3. 在需要调用plum模块的地方包含plum_api.h文件即可方便调用plum下的所有组件。 4. 编译。根据开发平台来确定需要编译运行的版本。如需要在64位PC上运行,命令如下: ~~~~~~~~~~~~~shell make x64 ~~~~~~~~~~~~~ ### MDK环境 1. 建立基础工程。 2. 点击 “option for target” --> “C/C++” --> “Include Paths” --> “New” ,将core目录选择为plum组件的头文件路径。 3. 修改“core/kernel/plum_config.h”文件,手动使能相应的宏定义。 4. “Manage Project Iterm” 下将需要的plum组件源码依次添加到工程目录下。 5. 编译工程。