SylixOS ARM BSP 第三篇【bspInit.c】

此篇博客为 SylixOS ARM BSP 编写连载的第三篇,主要介绍 bspInit.c 文件具体实现。

bspInit.c 为 BSP 操作系统初始化部分代码,通常由 startup.S 初始完基本处理器参数后调用,下面以 S3C2440A 处理器为例,逐块介绍 bspInit.c 代码。

SylixOS ARM BSP 第二篇中提到 startup.S 初始化完成会将会调用 bspInit() 函数,此函数用于初始化操作系统,并开始多任务调度。

int bspInit (void)
{
    static __section(.noinit) CHAR  cKernelHeap[6 * LW_CFG_MB_SIZE];
    static __section(.noinit) CHAR  cSystemHeap[6 * LW_CFG_MB_SIZE];
    
    halModeInit();
    debugChannelInit(0);
    
    API_KernelStartParam("ncpus=1 kdlog=no kderror=yes kfpu=no heapchk=yes");
    API_KernelStart(usrStartup, cKernelHeap,sizeof(cKernelHeap),
                    cSystemHeap,sizeof(cSystemHeap));
    return  (-1);
}

代码中定义的 cKernelHeap 与 cSystemHeap 为 SylixOS 内核堆与系统堆内存位置( cKernelHeap 与 cSystemHeap 数组不需要被清零),这里通过 static char 数字的方式开辟,__section(.noinit) 其中 __section() 是一个宏,原型在 sys/compiler.h 中定义:

#ifdef BSD /* bsd system use __attribute__ ((__section__(S))) not #S, 
              so compiler bsd source MUST defined BSD */
#  define __section(S)   __attribute__ ((__section__(S)))
#else
#  define __section(S)   __attribute__ ((__section__(#S)))
#endif

表示将被定义的对象放在某一个指定的段中,这里的 __section(.noinit) 表示 cKernelHeap 与 cSystemHeap 数组放在 .noinit 段中(如果没有指定,则默认在 .bss 段中),类似汇编中的 SECTION() 操作。

.noinit 段不需要在 startup.S 中没有像 .bss 段一样被清零,所以这样的方法可以加快系统启动时间。

halModeInit() 是目标机模式初始化函数,目前为空函数,如有需要用户可以加入自己的代码,此代码将会在操作系统初始化之前被调用。

debugChannelInit() 操作系统内部使用 bspDebugMsg() 作为内部调试信息打印接口,debugChannelInit() 就是初始化这个打印接口,bspDebugMsg() 函数将在以后的 bspLib.c 博文中详细说明。

API_KernelStartParam() 是系统内核函数,负责设置操作系统启动参数,启动参数为一个字符串,格式为【参数名=参数值】多个参数之间用空格隔开,SylixOS 目前支持的启动参数有:

参数名 默认值 说明
ncpus 1 CPU 个数,例如单核处理器 ncpus=1 多核处理器 ncpus=CPU 数量,注意:ncpus 不得大于 LW_CFG_MAX_PROCESSORS
dlog no 是否允许操作系统通过 bspDebugMsg() 函数打印调试信息,dlog=yes 代表允许,dlog=no 代表不允许
derror yes 是否允许操作系统通过 bspDebugMsg() 函数打印错误信息,参数与 dlog 相同
kfpu no 是否允许操作系统内核使用硬浮点运算器,强烈建议此参数为 no
heapchk yes 是否允许操作系统对所有内存堆操作进行内存访问越界检查,建议参数为 yes
varea 0xC0000000 表示系统虚拟内存空间起始点,虚拟空间配置将在以后的 bspMap.h 博文中详细说明。
vsize 0x40000000
hz 100
hhz 100
irate 5
hpsec 1

(未完,待续)

时间: 2024-11-07 01:27:00

SylixOS ARM BSP 第三篇【bspInit.c】的相关文章

SylixOS ARM BSP 第二篇【startup.S】

此篇博客为 SylixOS ARM BSP 编写连载的第二篇,主要介绍 startup.S 文件具体实现. startup.S 为 BSP 启动代码入口,通常由 bootloader 装载完 SylixOS 镜像后调用,下面以 S3C2440A 处理器为例,逐块介绍 startup.S 代码. #ifndef ASSEMBLY #define ASSEMBLY 1 #endif 此段代码告知后面引用的头文件,此文件为汇编程序. #include <arch/assembler.h> 引用操作系

HttpApplication处理对象与HttpModule处理模块 (第三篇)

一.HttpApplication对象简述 在HttpRuntime创建了HttpContext对象之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication. HttpRuntime管理一个定义在System.Web命名空间下的HttpApplicationFactory类的时候,HttpApplicationFactory通过工厂模式管理HttpApplication对象.在HttpApplicationFactory内部维护了一个HttpA

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

谷歌的三篇论文

传说中的谷歌三篇论文 MapReduce: Simpli?ed Data Processing on Large Clusters The Google file system Bigtable: A Distributed Storage System for Structured Data 谷歌学术立搜可下,每日潜心研习,假以时日,便可大成.

认识元数据和IL(上) &lt;第三篇&gt;

说在,开篇之前 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有<第一回:恩怨情仇:is和as>那么迅速,但是Metadata和IL却是绝对重量级的内容,值得我们在任何时间关注,本文就是开始. 1 引言 你可曾想到,我们的C#代码,编译之后究竟为何物?你可曾认知,我们的可执行程序,运行之时的轨迹究竟为哪般?那么,本文通过对Metadata(元数据)和IL(Intermediate Language, 中间语

编写小游戏《贪头蛇》第三篇

源码下载地址:http://download.csdn.net/detail/oyangyufu/7492917 点击NEW GAME按钮,进入游戏主场景 代码: 游戏背景 layer = (CCLayer*)this->getChildren()->objectAtIndex(SnakeConstants::LAYER_BACKGROUND); layer->setTouchEnabled(false); //游戏背景 CCSize size = CCDirector::sharedD

ORA-38760: This database instance failed to turn on flashback database 第三篇

ORA-38760: This database instance failed to turn on flashback database  第三篇 第一篇 第二篇 问题现象: 在数据库alert告警日志中看见例如以下信息: Completed: ALTER DATABASE MOUNT Wed Nov 19 04:57:28 2014 alter database open Errors in file /DBSoft/diag/rdbms/woo/woo/trace/woo_ora_593

第三篇 读后感

      今天读了大道至简中的第三篇关于团队缺乏的不只是管理的文章,其中作者引用了<汉书>中的“言人三人众”,来说明团队是至少以三个人为规模的,而三人构成的团队,这样便具备了团队的一些基本特征:主从.监督和责任.团队并不是个体能够组成的,两个人同样不能成为一个团队,两人则互相支撑,正如古文中“从”字是二人互立的,并没有监督.老师课上所说的一个和尚有水喝,两个和尚抬水喝,三个和尚没水喝的故事,三个和尚之所以没水喝是因为没有能够的安排没有领导人,三个人本能比一个人有更高的效率,正如文中所说的的一

学习KnockOut第三篇之List

欲看此篇---------------------------------------------可先看上篇. 第一步,先搭建一个大概的框架起来.至于绑定什么的,我们稍后慢慢进行.可能会有人问为什么我那个位置要写一个form,关于这个呢,且埋一伏笔,稍后说明原由. 我们要做的是,当点击“Add”按钮时能将文本框里的值加入的下拉框里,当我们选中下拉框里的选项时点击"Remove"也能进行删除操作,同样,当点击“Sort”时也能对下拉框里的选项进行排序.有代码和图: 1 <!DOCT