Skip to content

aCoral Development Rules

spg edited this page Mar 28, 2024 · 10 revisions

1. aCoral设计理念

1.1 架构设计

aCoral由内核模块和外围模块组成,其中内核模块对应于kernel文件夹以及hal文件夹,外围模块对应driver文件夹和plugin文件夹,除此以外,user文件夹作为上层应用,也被放在aCoral源码中。aCoral的设计理念中,这些文件夹是分层的,其架构图如图所示

aCoral-architecture

分层设计理念中,上层需要通过下层提供的接口来访问更低级别的功能,而下层不能访问上层,例如:

  • kernel需要访问hal层,则必须通过hal或HAL开头的接口。这只需要#include "hal.h"即可
  • hal文件夹中需要使用kernel中的内容(函数、变量),则需要以参数的形式传入,这是为了保证在下层中,不包含上层的头文件。例如,在hal_timer_init()函数中,需要使用acoral_ticks_entry()函数来初始化定时器,此时不能直接在hal_timer_init中使用acoral_ticks_entry,而必须通过hal_timer_init的参数,将acoral_ticks_entry函数的指针以参数形式传进来使用。

这样分层的设计理念,可以尽可能降低上下层之间的耦合度。

1.2 面向对象

aCoral内核的内存管理模型分为两层,底层通过伙伴系统管理物理内存,向上提供malloc、free接口;上层通过资源池,管理系统用中的资源。 aCoral内核将所有管理的对象抽象为资源(resource),包括线程控制块TCB、事件(event,包括信号量和互斥量)、消息队列、驱动控制块等,即万物皆资源。这点类似于RT-THREAD中的Object概念,都属于面向对象的编程思想。

2. aCoral设计规范

  • kernel文件夹中的代码提供了aCoral最核心的内核机制,不应该轻易修改。如果需要针对特殊应用场景,新增机制,请在lib文件夹中进行开发。
  • hal文件夹中,不同的SOC放在不同的文件夹中。

3. aCoral代码编写规范

3.1 头文件

  • 每个头文件用#ifndef包裹,以xxx.h为例:
#ifndef ACORAL_XXX_H
#define ACORAL_XXX_H
......
#endif
  • kernel层头文件请直接使用hal.h,不要去单独使用hal文件夹里面的头文件

3.2 源文件

  • API以"acoral_"开头,非API函数如果重要的话,以system_开头
  • 非API且仅在本源文件内使用的函数,加上static修饰,并且不要在头文件内声明该函数,注释也直接写在源文件函数上

Clone this wiki locally