Files
cosyos/说明文档/开发流程.md
零中断延迟的RTOS c1f7a807ef update 说明文档/开发流程.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2024-04-08 17:43:07 +00:00

167 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 拷贝系统文件<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>
![输入图片说明](../images/KFLC_group_1.png)<br>
![输入图片说明](../images/KFLC_group_2.png)<br>
### 配置工程<br>
#### 8051内核
一、使用LX51扩展链接器<br>
![输入图片说明](../images/KFLC_8051_1.png)<br>
二、内存模型<br>
内存模型仅支持Large不要选择其它。如果您的变量希望定义在其它内存可在定义时指定存储域。<br>
![输入图片说明](../images/KFLC_8051_2.png)<br>
三、优化级别<br>
可选级别4~8级<br>
推荐级别8级default<br>
CosyOS支持高等级优化您完全可以选择8级defaultspeed偏向于代码执行效率size偏向于减少代码量。<br>
最低不能低于4级必须启用寄存器变量优化最高不能高于8级。即使代码放不下您也不能把优化级别<br>
设置为9级或以上可通过删减代码或增大flash来解决。<br>
![输入图片说明](../images/KFLC_8051_3.png)<br>
四、不覆盖/可重入/移除未使用<br>
1、LX51 Misc标签页添加控制命令“NOOVERLAY”以禁用数据覆盖。<br>
![输入图片说明](../images/KFLC_8051_4.png)<br>
2、由于CosyOS for 8051在设计上已经摒弃了传统的可重入栈【IBPSTACK/PBPSTACK/XBPSTACK】所以也不建议用户采用。<br>
原因是C51的可重入栈效率十分低下对于XBPSTACK还存在关中断行为。<br>
对于不可重入的C51标准库函数或自定义函数如需要可重入可采用下述方法。<br>
1等效替换法对于不可重入的C51标准库函数可考虑替换为其它可重入的库函数实现相同的功能。<br>
| non-reentrant | reentrant | 替换条件 |
|--------------------|--------------------------------|----------------------------------|
| strncpy(s1, s2, n) | memcpy(s1, s2, n) | 推荐s2的有效长度至少为n |
| strncat(s1, s2, n) | memcpy(s1 + strlen(s1), s2, n) | 推荐s2的有效长度至少为n |
| strcat(s1, s2) | strcpy(s1 + strlen(s1), s2) | 无 |
| strncmp(s1, s2, n) | memcmp(s1, s2, n) | 确保其中一个字符串的有效长度至少为n |
2可重入版本获取或重写该函数的可重入版本。<br>
3副本函数用户可复制相同的副本再分别调用。<br>
4互斥函数采用二值信号量、互斥信号量、任务临界区等方式来实现互斥访问。<br>
3、为减少代码量用户应手动移除未使用的变量、函数或C文件因为“NOOVERLAY”会导致“REMOVEUNUSED”失效。<br>
#### 80251内核
一、Target标签页<br>
CPU模式仅支持Source251 native。<br>
内存模型支持Small、XSmall、Large。<br>
Code Rom Size支持Large、Huge。Huge模式时需用户自行配置Exeternal Memory。<br>
推荐勾选 4 Byte Interrupt Frame Size。<br>
![输入图片说明](../images/KFLC_80251_1.png)<br>
![输入图片说明](../images/KFLC_80251_2.png)<br>
二、HEX Format<br>
Code Rom Size为Huge时仅支持HEX-386格式。<br>
![输入图片说明](../images/KFLC_80251_3.png)<br>
三、优化级别<br>
可选级别3~7级<br>
推荐级别7级default<br>
CosyOS支持高等级优化您完全可以选择7级defaultspeed偏向于代码执行效率size偏向于减少代码量。<br>
最低不能低于3级必须启用寄存器变量优化最高不能高于7级。即使代码放不下您也不能把优化级别<br>
设置为8级或以上可通过删减代码或增大flash来解决。<br>
![输入图片说明](../images/KFLC_80251_4.png)<br>
四、不覆盖/可重入/移除未使用<br>
方案一、“Generate reentrant functions” + “REMOVEUNUSED”<br>
1、C251标签页“Generate reentrant functions”打勾以生成全局可重入函数。<br>
![输入图片说明](../images/KFLC_80251_5.png)<br>
2、L251 Misc标签页添加控制命令“REMOVEUNUSED”以自动移除未使用的代码段和数据段。<br>
![输入图片说明](../images/KFLC_80251_6.png)<br>
方案二、“NOOVERLAY” + “reentrant” + “手动移除未使用”<br>
1、C251标签页“Generate reentrant functions”不可打勾。<br>
2、L251 Misc标签页添加控制命令“NOOVERLAY”以禁用数据覆盖。<br>
![输入图片说明](../images/KFLC_80251_7.png)<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>
![输入图片说明](../images/KFLC_80251_8.png)<br>
![输入图片说明](../images/KFLC_80251_9.png)<br>
#### Arm内核
一、Target标签页<br>
使用微库还是标准库与CosyOS无关。<br>
如果MCU有硬件浮点运算单元并且您需要使用它仅需在此开启选项即可。<br>
![输入图片说明](../images/KFLC_Arm_1.png)<br>
二、C/C++标签页<br>
优化级别CosyOS支持高等级优化您完全可以选择O2级default但不推荐您选择O3级。<br>
C99模式为可选项。<br>
GNU扩展当mcucfg_cmx.h中系统方案配置为全局寄存器变量时GNU扩展为必选项如不勾选CosyOS将无法正常使用。<br>
如选项中没有“GNU extensions”可在下方的“Misc Controls”中添加“--GNU”来启用。<br>
![输入图片说明](../images/KFLC_Arm_2.png)<br>
### 系统配置<br>
打开Config\syscfg.h这里是CosyOS的系统配置各项设置均有详细的说明在keil下可使用图形用户界面Configuration Wizard进行配置如出现乱码将文件的编码格式转换为ANSI即可解决。<br>
![输入图片说明](../images/syscfg.png)
### MCU配置<br>
MCU配置分为用户定义和系统定义用户定义是需要用户配置的各项设置均有详细的说明在keil下可使用图形用户界面Configuration Wizard进行配置如出现乱码将文件的编码格式转换为ANSI即可解决。<br>
#### 8051内核
![输入图片说明](../images/mcucfg_8051.png)<br>
#### 80251内核
![输入图片说明](../images/mcucfg_80251.png)<br>
#### Cortex-M内核
![输入图片说明](../images/mcucfg_cmx.png)<br>
### 堆栈配置<br>
#### 栈STACK
所有内核,栈需要用户自行在启动文件中配置。<br>
#### 堆HEAP
Arm内核堆需要用户自行在启动文件中配置。<br>
8051内核、80251内核没有堆的概念与之相应的是内存池用户需在MCU配置文件中配置。<br>
#### 可重入栈reentrant stack
1、8051内核所有系统服务均不使用可重入栈也不建议用户使用可重入栈无需用户配置。<br>
2、80251内核只有中断同步服务“接收邮件”需要使用可重入栈且系统已经配置好了无需用户配置。<br>
3、Arm内核栈就是可重入栈无需用户配置。<br>
### 链接文件<br>
用户在自己的各个C文件中需包含系统链接头文件os_link.h。<br>
```c
#include "..\System\os_link.h"
```
### 系统初始化
初始化寄存器、GPIO、中断等工作需在初始化钩子中执行。<br>
### 创建任务
### 启动任务
需在启动钩子中启动用户任务。<br>
注意所有系统任务、定时中断任务、定时查询任务均由CosyOS自动启动无需用户启动。<br>
**_接下来就让我们开始CosyOS之旅吧_** :star: :star: :star: :star: :star: