mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-05 11:29:44 +08:00
重命名 说明文档(持续更新中...) 为 说明文档
This commit is contained in:
163
说明文档/开发流程.md
Normal file
163
说明文档/开发流程.md
Normal file
@@ -0,0 +1,163 @@
|
||||
### 拷贝系统文件<br>
|
||||
**System**:CosyOS的内核文件。<br>
|
||||
**Config**:CosyOS的配置文件,包括系统配置文件和MCU配置文件。<br>
|
||||
**Hook**:CosyOS已经为用户创建好了六个系统钩子函数,分别位于各自同名的C文件中,用户直接写代码即可。<br>
|
||||
拷贝上述三个文件夹及其下属文件至您的工程文件夹。<br>
|
||||
|
||||
### 添加Group和文件<br>
|
||||
打开工程,添加三个Group,分别命名为System、Config、Hook,再分别添加同名文件夹下的所有文件至各个Group。<br>
|
||||
Config组可以添加所有文件,也可有选择的添加文件。首先添加syscfg.h,再添加相应的MCU配置文件。<br>
|
||||
如您使用的是51单片机,应添加mcucfg_8051.c和mcucfg_8051.h;<br>
|
||||
如您使用的是Cortex-M内核,应添加mcucfg_cmx.c和mcucfg_cmx.h。<br>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
### 配置工程<br>
|
||||
#### 8051内核
|
||||
|
||||
一、使用LX51扩展链接器<br>
|
||||
<br>
|
||||
|
||||
二、内存模型<br>
|
||||
内存模型仅支持Large,不要选择其它。如果您的变量希望定义在其它内存,可在定义时指定存储域。<br>
|
||||
<br>
|
||||
|
||||
三、优化级别<br>
|
||||
可选级别:4~8级<br>
|
||||
推荐级别:8级(default)<br>
|
||||
CosyOS支持高等级优化,您完全可以选择8级(default),speed偏向于代码执行效率,size偏向于减少代码量。<br>
|
||||
最低不能低于4级(必须启用寄存器变量优化),最高不能高于8级。即使代码放不下,您也不能把优化级别<br>
|
||||
设置为9级或以上,可通过删减代码或增大flash来解决。<br>
|
||||
<br>
|
||||
|
||||
四、不覆盖/可重入/移除未使用<br>
|
||||
1、LX51 Misc标签页,添加控制命令“NOOVERLAY”,以禁用数据覆盖。<br>
|
||||
<br>
|
||||
2、由于CosyOS for 8051在设计上已摒弃了传统的可重入栈【IBP/PBP/XBP】,所以对于不可重入的库函数或自定义函数,<br>
|
||||
如需要可重入,用户可复制相同的副本(函数)再分别调用,或采用二值信号量、互斥信号量(当仅存在任务中调用时)等方式来实现互斥访问。<br>
|
||||
3、为减少代码量,用户应手动移除未使用的变量、函数或C文件,因为“NOOVERLAY”会导致“REMOVEUNUSED”失效。<br>
|
||||
|
||||
#### 80251内核
|
||||
|
||||
一、Target标签页<br>
|
||||
CPU模式仅支持Source(251 native)。<br>
|
||||
内存模型支持Small、XSmall、Large。<br>
|
||||
Code Rom Size支持Large、Huge。Huge模式时,需用户自行配置Exeternal Memory。<br>
|
||||
推荐勾选 4 Byte Interrupt Frame Size。<br>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
二、HEX Format<br>
|
||||
Code Rom Size为Huge时,仅支持HEX-386格式。<br>
|
||||
<br>
|
||||
|
||||
三、优化级别<br>
|
||||
可选级别:3~7级<br>
|
||||
推荐级别:7级(default)<br>
|
||||
CosyOS支持高等级优化,您完全可以选择7级(default),speed偏向于代码执行效率,size偏向于减少代码量。<br>
|
||||
最低不能低于3级(必须启用寄存器变量优化),最高不能高于7级。即使代码放不下,您也不能把优化级别<br>
|
||||
设置为8级或以上,可通过删减代码或增大flash来解决。<br>
|
||||
<br>
|
||||
|
||||
四、不覆盖/可重入/移除未使用<br>
|
||||
|
||||
方案一、“Generate reentrant functions” + “REMOVEUNUSED”<br>
|
||||
1、C251标签页,“Generate reentrant functions”打勾,以生成全局可重入函数。<br>
|
||||
<br>
|
||||
2、L251 Misc标签页,添加控制命令“REMOVEUNUSED”,以自动移除未使用的代码段和数据段。<br>
|
||||
<br>
|
||||
|
||||
方案二、“NOOVERLAY” + “reentrant” + “手动移除未使用”<br>
|
||||
1、C251标签页,“Generate reentrant functions”不可打勾。<br>
|
||||
2、L251 Misc标签页,添加控制命令“NOOVERLAY”,以禁用数据覆盖。<br>
|
||||
<br>
|
||||
3、用户的自定义函数如需要可重入,应手动添加“reentrant”属性。<br>
|
||||
|
||||
```c
|
||||
void function_x(void) reentrant;
|
||||
void function_x(void) reentrant
|
||||
{
|
||||
;
|
||||
}
|
||||
```
|
||||
|
||||
4、为减少代码量,用户应手动移除未使用的变量、函数或C文件,因为“NOOVERLAY”会导致“REMOVEUNUSED”失效。<br>
|
||||
|
||||
方案一 PK 方案二<br>
|
||||
1、方案一为智能方案,所有函数都将成为可重入函数,并自动移除未使用的代码段和数据段。<br>
|
||||
2、方案二为性能方案,性能上优于方案一,但需要用户明确哪些函数需要可重入并声明,并手动移除未使用的代码段和数据段。<br>
|
||||
3、方案一相较方案二,需配置更大的任务栈,对edata内存的需求将明显增加。<br>
|
||||
4、如果启用私信功能,您仅能采用方案二。<br>
|
||||
|
||||
五、内嵌汇编<br>
|
||||
System\os_handler.c应设置内嵌汇编。<br>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
#### Arm内核
|
||||
|
||||
一、Target标签页<br>
|
||||
使用微库还是标准库与CosyOS无关。<br>
|
||||
如果MCU有硬件浮点运算单元并且您需要使用它,仅需在此开启选项即可。<br>
|
||||
<br>
|
||||
|
||||
二、C/C++标签页<br>
|
||||
优化级别:CosyOS支持高等级优化,您完全可以选择O2级(default),但不推荐您选择O3级。<br>
|
||||
C99模式:为可选项,建议勾选。<br>
|
||||
GNU扩展:为必选项,如不勾选,CosyOS将无法正常使用。<br>
|
||||
如选项中没有“GNU extensions”,可在下方的“Misc Controls”中添加“--GNU”来启用。<br>
|
||||
<br>
|
||||
|
||||
### 系统配置<br>
|
||||
打开Config\syscfg.h,这里是CosyOS的系统配置,各项设置均有详细的说明,在keil下可使用图形用户界面Configuration Wizard进行配置,如出现乱码,将文件的编码格式转换为ANSI即可解决。<br>
|
||||

|
||||
|
||||
### MCU配置<br>
|
||||
MCU配置分为用户定义和系统定义,用户定义是需要用户配置的,各项设置均有详细的说明,在keil下可使用图形用户界面Configuration Wizard进行配置,如出现乱码,将文件的编码格式转换为ANSI即可解决。<br>
|
||||
|
||||
#### 8051内核
|
||||
<br>
|
||||
|
||||
#### 80251内核
|
||||
<br>
|
||||
|
||||
#### Cortex-M内核
|
||||
<br>
|
||||
|
||||
### 堆栈配置<br>
|
||||
#### 栈(STACK)
|
||||
所有内核,栈需要用户自行在启动文件中配置。<br>
|
||||
#### 堆(HEAP)
|
||||
Arm内核,堆需要用户自行在启动文件中配置。<br>
|
||||
8051内核、80251内核,没有堆的概念,与之相应的是内存池,用户需在MCU配置文件中配置。<br>
|
||||
#### 可重入栈(reentrant stack)
|
||||
1、8051内核,所有系统服务均不使用可重入栈[IBP/PBP/XBP],也不允许用户使用可重入栈,无需用户配置。<br>
|
||||
2、80251内核,只有中断同步服务“接收邮件”需要使用可重入栈,且系统已经配置好了,无需用户配置。<br>
|
||||
3、Arm内核,栈就是可重入栈,无需用户配置。<br>
|
||||
|
||||
### 链接文件<br>
|
||||
用户在自己的各个C文件中需包含系统链接头文件os_link.h。<br>
|
||||
|
||||
```c
|
||||
#include "..\System\os_link.h"
|
||||
```
|
||||
|
||||
### 系统初始化
|
||||
初始化寄存器、GPIO、中断等工作,需在初始化钩子中执行。<br>
|
||||
|
||||
### 创建任务
|
||||
任务线程的创建,支持的API包括如下:<br>
|
||||
1、创建一般任务:uCreateTask(task, tpl, tss, srt, ndm)<br>
|
||||
2、创建定时中断任务:uCreateTask_TimInt(tmid, arl, task, tpl, tss, srt, ndm)<br>
|
||||
3、创建定时查询任务:uCreateTask_TimQry(tmid, event, arl, task, tpl, tss, srt, ndm)<br>
|
||||
详情请参阅《CosyOS-API用户参考手册》中的相关说明及示例代码。<br>
|
||||
|
||||
### 启动任务
|
||||
需在启动钩子中启动用户任务,支持的API包括如下:<br>
|
||||
1、启动任务:uStartTask(task, state)<br>
|
||||
2、启动任务并就绪:uStartTask_Ready(task)<br>
|
||||
3、启动任务并挂起:uStartTask_Suspend(task)<br>
|
||||
详情请参阅《CosyOS-API用户参考手册》中的相关说明及示例代码。<br>
|
||||
注意:所有系统任务、定时中断任务、定时查询任务均由CosyOS自动启动,无需用户启动。<br>
|
||||
|
||||
**_接下来,就让我们开始CosyOS之旅吧!_** :star: :star: :star: :star: :star:
|
||||
Reference in New Issue
Block a user