8.5 KiB
拷贝系统文件
System:CosyOS的内核文件。
Config:CosyOS的配置文件,包括系统配置文件和MCU配置文件。
Hook:CosyOS已经为用户创建好了六个系统钩子函数,分别位于各自同名的C文件中,用户直接写代码即可。
拷贝上述三个文件夹及其下属文件至您的工程文件夹。
添加Group和文件
打开工程,添加三个Group,分别命名为System、Config、Hook,再分别添加同名文件夹下的所有文件至各个Group。
Config组可以添加所有文件,也可有选择的添加文件。首先添加syscfg.h,再添加相应的MCU配置文件。
如您使用的是51单片机,应添加mcucfg_8051.c和mcucfg_8051.h;
如您使用的是Cortex-M内核,应添加mcucfg_cmx.c和mcucfg_cmx.h。


配置工程
8051内核
二、内存模型
内存模型仅支持Large,不要选择其它。如果您的变量希望定义在其它内存,可在定义时指定存储域。

三、优化级别
可选级别:4~8级
推荐级别:8级(default)
CosyOS支持高等级优化,您完全可以选择8级(default),speed偏向于代码执行效率,size偏向于减少代码量。
最低不能低于4级(必须启用寄存器变量优化),最高不能高于8级。即使代码放不下,您也不能把优化级别
设置为9级或以上,可通过删减代码或增大flash来解决。

四、不覆盖/可重入/移除未使用
1、LX51 Misc标签页,添加控制命令“NOOVERLAY”,以禁用数据覆盖。

2、由于CosyOS for 8051在设计上已摒弃了传统的可重入栈【IBP/PBP/XBP】,所以对于不可重入的库函数或自定义函数,
如需要可重入,用户可复制相同的副本(函数)再分别调用,或采用二值信号量、互斥信号量(当仅存在任务中调用时)等方式来实现互斥访问。
3、为减少代码量,用户应手动移除未使用的变量、函数或C文件,因为“NOOVERLAY”会导致“REMOVEUNUSED”失效。
80251内核
一、Target标签页
CPU模式仅支持Source(251 native)。
内存模型支持Small、XSmall、Large。
Code Rom Size支持Large、Huge。Huge模式时,需用户自行配置Exeternal Memory。
推荐勾选 4 Byte Interrupt Frame Size。


二、HEX Format
Code Rom Size为Huge时,仅支持HEX-386格式。

三、优化级别
可选级别:3~7级
推荐级别:7级(default)
CosyOS支持高等级优化,您完全可以选择7级(default),speed偏向于代码执行效率,size偏向于减少代码量。
最低不能低于3级(必须启用寄存器变量优化),最高不能高于7级。即使代码放不下,您也不能把优化级别
设置为8级或以上,可通过删减代码或增大flash来解决。

四、不覆盖/可重入/移除未使用
方案一、“Generate reentrant functions” + “REMOVEUNUSED”
1、C251标签页,“Generate reentrant functions”打勾,以生成全局可重入函数。

2、L251 Misc标签页,添加控制命令“REMOVEUNUSED”,以自动移除未使用的代码段和数据段。

方案二、“NOOVERLAY” + “reentrant” + “手动移除未使用”
1、C251标签页,“Generate reentrant functions”不可打勾。
2、L251 Misc标签页,添加控制命令“NOOVERLAY”,以禁用数据覆盖。

3、用户的自定义函数如需要可重入,应手动添加“reentrant”属性。
void function_x(void) reentrant;
void function_x(void) reentrant
{
;
}
4、为减少代码量,用户应手动移除未使用的变量、函数或C文件,因为“NOOVERLAY”会导致“REMOVEUNUSED”失效。
方案一 PK 方案二
1、方案一为智能方案,所有函数都将成为可重入函数,并自动移除未使用的代码段和数据段。
2、方案二为性能方案,性能上优于方案一,但需要用户明确哪些函数需要可重入并声明,并手动移除未使用的代码段和数据段。
3、方案一相较方案二,需配置更大的任务栈,对edata内存的需求将明显增加。
4、如果启用私信功能,您仅能采用方案二。
五、内嵌汇编
System\os_handler.c应设置内嵌汇编。


Arm内核
一、Target标签页
使用微库还是标准库与CosyOS无关。
如果MCU有硬件浮点运算单元并且您需要使用它,仅需在此开启选项即可。

二、C/C++标签页
优化级别:CosyOS支持高等级优化,您完全可以选择O2级(default),但不推荐您选择O3级。
C99模式:为可选项,建议勾选。
GNU扩展:为必选项,如不勾选,CosyOS将无法正常使用。
如选项中没有“GNU extensions”,可在下方的“Misc Controls”中添加“--GNU”来启用。

系统配置
打开Config\syscfg.h,这里是CosyOS的系统配置,各项设置均有详细的说明,在keil下可使用图形用户界面Configuration Wizard进行配置,如出现乱码,将文件的编码格式转换为ANSI即可解决。

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



