-
Notifications
You must be signed in to change notification settings - Fork 0
aCoral Development Rules
spg edited this page Apr 2, 2024
·
10 revisions
aCoral由内核模块和外围模块组成,其中内核模块对应于kernel文件夹以及hal文件夹,外围模块对应driver文件夹和plugin文件夹,除此以外,user文件夹作为上层应用,也被放在aCoral源码中。aCoral的设计理念中,这些文件夹是分层的,其架构图如图所示

分层设计理念中,上层需要通过下层提供的接口来访问更低级别的功能,而下层不能访问上层,例如:
- 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函数的指针以参数形式传进来使用。
这样分层的设计理念,可以尽可能降低上下层之间的耦合度。
aCoral内核将所有管理的对象抽象为资源(resource),包括线程控制块TCB、事件(event,包括信号量和互斥量)、消息队列、驱动控制块等,即万物皆资源。这点类似于RT-THREAD中的Object概念,都属于面向对象的编程思想。
aCoral的实时性通过实时调度策略、快速资源管理、快速中断管理三个方面来维护
aCoral对于资源的管理采取的策略为:分配时尽量快速(O(1)时间复杂度),回收交给daem线程,空时再做。
- kernel文件夹中的代码提供了aCoral最核心的内核机制,不应该轻易修改。如果需要针对特殊应用场景,新增机制,请在lib文件夹中进行开发。
- hal文件夹中,不同的SOC放在不同的文件夹中。
- 每个头文件用#ifndef包裹,以xxx.h为例:
#ifndef ACORAL_XXX_H
#define ACORAL_XXX_H
......
#endif
- kernel层头文件请直接使用hal.h,不要去单独使用hal文件夹里面的头文件
- API以"acoral_"开头,非API函数如果重要的话,以system_开头
- 非API且仅在本源文件内使用的函数,加上static修饰,并且不要在头文件内声明该函数,注释也直接写在源文件函数上