mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-05 11:29:44 +08:00
21
说明文档/开发流程.md
21
说明文档/开发流程.md
@@ -36,7 +36,7 @@ CosyOS支持高等级优化,您完全可以选择8级(default),speed偏
|
||||
2、由于CosyOS for 8051在设计上已经摒弃了传统的可重入栈【IBPSTACK/PBPSTACK/XBPSTACK】,所以也不建议用户采用。<br>
|
||||
原因是C51的可重入栈效率十分低下,对于XBPSTACK,还存在关中断行为。<br>
|
||||
对于不可重入的C51标准库函数或自定义函数,如需要可重入,可采用下述方法。<br>
|
||||
(1)替换法:对于不可重入的C51标准库函数,可考虑替换为其它可重入的库函数,实现相同的功能。<br>
|
||||
(1)等效替换法:对于不可重入的C51标准库函数,可考虑替换为其它可重入的库函数,实现相同的功能。<br>
|
||||
| non-reentrant | reentrant | 替换条件 |
|
||||
|--------------------|--------------------------------|----------------------------------|
|
||||
| strncpy(s1, s2, n) | memcpy(s1, s2, n) | 推荐s2的有效长度至少为n |
|
||||
@@ -96,7 +96,7 @@ void function_x(void) reentrant
|
||||
4、为减少代码量,用户应手动移除未使用的变量、函数或C文件,因为“NOOVERLAY”会导致“REMOVEUNUSED”失效。<br>
|
||||
|
||||
方案一 PK 方案二<br>
|
||||
1、方案一为智能方案,所有函数都将成为可重入函数,并自动移除未使用的代码段和数据段。<br>
|
||||
1、方案一为智能方案,所有函数都试图生成可重入函数,并自动移除未使用的代码段和数据段。<br>
|
||||
2、方案二为性能方案,性能上优于方案一,但需要用户明确哪些函数需要可重入并声明,并手动移除未使用的代码段和数据段。<br>
|
||||
3、方案一相较方案二,需配置更大的任务栈,对edata内存的需求将明显增加。<br>
|
||||
4、如果启用私信功能,您仅能采用方案二。<br>
|
||||
@@ -115,8 +115,8 @@ System\os_handler.c应设置内嵌汇编。<br>
|
||||
|
||||
二、C/C++标签页<br>
|
||||
优化级别:CosyOS支持高等级优化,您完全可以选择O2级(default),但不推荐您选择O3级。<br>
|
||||
C99模式:为可选项,建议勾选。<br>
|
||||
GNU扩展:为必选项,如不勾选,CosyOS将无法正常使用。<br>
|
||||
C99模式:为可选项。<br>
|
||||
GNU扩展:当mcucfg_cmx.h中,系统方案配置为全局寄存器变量时,GNU扩展为必选项,如不勾选,CosyOS将无法正常使用。<br>
|
||||
如选项中没有“GNU extensions”,可在下方的“Misc Controls”中添加“--GNU”来启用。<br>
|
||||
<br>
|
||||
|
||||
@@ -143,7 +143,7 @@ MCU配置分为用户定义和系统定义,用户定义是需要用户配置
|
||||
Arm内核,堆需要用户自行在启动文件中配置。<br>
|
||||
8051内核、80251内核,没有堆的概念,与之相应的是内存池,用户需在MCU配置文件中配置。<br>
|
||||
#### 可重入栈(reentrant stack)
|
||||
1、8051内核,所有系统服务均不使用可重入栈[IBP/PBP/XBP],也不允许用户使用可重入栈,无需用户配置。<br>
|
||||
1、8051内核,所有系统服务均不使用可重入栈,也不建议用户使用可重入栈,无需用户配置。<br>
|
||||
2、80251内核,只有中断同步服务“接收邮件”需要使用可重入栈,且系统已经配置好了,无需用户配置。<br>
|
||||
3、Arm内核,栈就是可重入栈,无需用户配置。<br>
|
||||
|
||||
@@ -158,18 +158,9 @@ Arm内核,堆需要用户自行在启动文件中配置。<br>
|
||||
初始化寄存器、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>
|
||||
需在启动钩子中启动用户任务。<br>
|
||||
注意:所有系统任务、定时中断任务、定时查询任务均由CosyOS自动启动,无需用户启动。<br>
|
||||
|
||||
**_接下来,就让我们开始CosyOS之旅吧!_** :star: :star: :star: :star: :star:
|
||||
|
||||
Reference in New Issue
Block a user