nucleus plus代码学习
int.S:
- ;************************************************************************
- ;*
- ;* FUNCTION
- ;*
- ;* INT_Initialize
- ;*
- ;* DESCRIPTION
- ;*
- ;* This function sets up the global system stack variable and
- ;* transfers control to the target independent initialization
- ;* function INC_Initialize. Responsibilities of this function
- ;* include the following:
- ;*
- ;* - Setup necessary processor/system control registers
- ;* - Initialize the vector table
- ;* - Setup the system stack pointers
- ;* - Setup the timer interrupt
- ;* - Calculate the timer HISR stack and priority
- ;* - Calculate the first available memory address
- ;* - Transfer control to INC_Initialize to initialize all of
- ;* the system components.
- ;*
- ;* Major Revision:
- ;*
- ;* M. Kyle Craig, Accelerated Technology, Inc.
- ;*
- ;*
- ;*
- ;*
- ;* CALLED BY
- ;*
- ;* Nothing. This function is the ENTRY point for Nucleus PLUS.
- ;*
- ;* CALLS
- ;*
- ;* INC_Initialize Common initialization
- ;*
- ;* INPUTS
- ;*
- ;* None
- ;*
- ;* OUTPUTS
- ;*
- ;* None
- ;*
- ;* HISTORY
- ;*
- ;* NAME DATE REMARKS
- ;*
- ;* W. Lamie 08-27-1994 Created initial version 1.0
- ;* D. Lamie 08-27-1994 Verified version 1.0
- ;*
- ;************************************************************************
- ;VOID INT_Initialize(void)
- ;{
- .def _c_int00
- _c_int00
- .def _INT_Initialize
- _INT_Initialize:
- ; Insure that the processor is in supervisor mode. //设置了arm的svc模式
- MRS r0,CPSR ; Pickup current CPSR
- BIC r0,r0,#MODE_MASK ; Clear the mode bits
- ORR r0,r0,#SUP_MODE ; Set the supervisor mode bits
- ORR r0,r0,#LOCKOUT ; Insure IRQ/FIQ interrupts are //关闭中断
- ; locked out
- MSR CPSR,r0 ; Setup the new CPSR
- ; Clear the un-initialized global and static C data areas.
- LDR r0,BSS_Start ; Pickup the start of the BSS area
- MOV r2,#0 ; Clear value in r2
- LDR r1,BSS_End ; Pickup the end of the BSS area
- INT_BSS_Clear_Loop
- STR r2,[r0],#4 ; Clear a word //初始化Bss段
- INT_BSS_Clear_Check
- CMP r0,r1 ; Are the start and end equal?
- BNE INT_BSS_Clear_Loop ; If so, continue with BSS clear
- ; Perform auto-initialization. if cinit is -1, then there is none.
- LDR r0, c_cinit
- CMN r0, #1
- BLNE _auto_init
- ; Turn-on the I-Cache for the TI 925T Processor //开启I-Cache
- MRC p15,#0,r1,C1,C0,#0 ; Read the control register.
- ORR r1,r1,#0x1000 ; Set the I bit to enable Instruction Cache
- NOP
- MCR p15,#0,r1,C1,C0,#0 ; Write the control register.
- ; Setup the vectors loaded flag to indicate to other routines in the
- ; system whether or not all of the default vectors have been loaded.
- ; If INT_Loaded_Flag is 1, all of the default vectors have been loaded.
- ; Otherwise, if INT_Loaded_Flag is 0, registering an LISR cause the
- ; default vector to be loaded. In the ARM60 this variable is always
- ; set to 1. All vectors must be setup by this function.
- ; INT_Loaded_Flag = 0;
- MOV r0,#1 ; All vectors are assumed loaded
- LDR r1,Loaded_Flag ; Build address of loaded flag
- STR r0,[r1,#0] ; Initialize loaded flag
- ; Initialize the system stack pointers. This is done after the BSS is
- ; clear because the TCD_System_Stack pointer is a BSS It is
- ; assumed that available memory starts immediately after the end of the
- ; BSS section. //建立sys stack
- LDR r10,System_Stk_Limit ; Pickup the system stack limit (bottom of system stack)
- LDR r3,System_Limit ; Pickup sys stack limit addr
- STR r10,[r3, #0] ; Save stack limit
- LDR sp,System_Stack_SP ; Set-up the system stack pointer
- LDR r3,System_Stack ; Pickup system stack address
- STR sp,[r3, #0] ; Save stack pointer
- MRS r0,CPSR ; Pickup current CPSR
- BIC r0,r0,#MODE_MASK ; Clear the mode bits
- ORR r0,r0,#IRQ_MODE ; Set the IRQ mode bits
- MSR CPSR,r0 ; Move to IRQ mode
- LDR sp,IRQ_Stack_SP ; Setup IRQ stack pointer
- MRS r0,CPSR ; Pickup current CPSR
- BIC r0,r0,#MODE_MASK ; Clear the mode bits
- ORR r0,r0,#FIQ_MODE ; Set the FIQ mode bits
- MSR CPSR,r0 ; Move to the FIQ mode
- LDR sp,FIQ_Stack_SP ; Setup FIQ stack pointer
- MRS r0,CPSR ; Pickup current CPSR
- BIC r0,r0,#MODE_MASK ; Clear mode bits
- ORR r0,r0,#SUP_MODE ; Set the supervisor mode bits
- MSR CPSR,r0 ; All interrupt stacks are setup,
- ; return to supervisor mode
- ; Define the global data structures that need to be initialized by this //设置中断
- ; routine. These structures are used to define the system timer
- ; management HISR.
- ; TMD_HISR_Stack_Ptr = (VOID *) r2;
- ; TMD_HISR_Stack_Size = TIMER_SIZE;
- ; TMD_HISR_Priority = TIMER_PRIORITY;
- LDR r2,HISR_Stack_Mem ; Get HISR stack memory address
- LDR r3,HISR_Stack_Ptr ; Pickup variable's address
- STR r2,[r3, #0] ; Setup timer HISR stack pointer
- MOV r1,#HISR_STACK_SIZE ; Pickup the timer HISR stack size
- LDR r3,HISR_Stack_Size ; Pickup variable's address
- STR r1,[r3, #0] ; Setup timer HISR stack size
- MOV r1,#HISR_PRIORITY ; Pickup timer HISR priority (0-2)
- LDR r3,HISR_Priority ; Pickup variable's address
- STR r1,[r3, #0] ; Setup timer HISR priority
- ; Make a call to begin all board specific initialization. //初始化时钟
- ; Begin with Initializing the Vector table and replacing
- ; default interrupts with Plus IRQs. Then setup the timer
- ; and begin the system clock.
- .if $$isdefed("NU_ROM_SUPPORT")
- BL _INT_Timer_Initialize ; Initialize the timer
- .else
- BL INT_Install_Vector_Table ; Install the vector table
- BL _INT_Timer_Initialize ; Initialize the timer
- .endif
- ; Call INC_Initialize with a pointer to the first available memory
- ; address after the compiler's global data. This memory may be used
- ; by the application.
- ; INC_Initialize(first_available_memory);
- LDR r0,First_Avail_Mem ; Get address of first available memory
- B _INC_Initialize ; to high-level initialization //最后跳转到_INC_Initialize,找不到函数在哪
- ;}
- 。。。。。。
- 。。。。。。
初始化组件由三个部分组成,硬件在reset后首先进入INT_initialize(),进行板级的相关初始化,首先设置SVC mode,关中断,然后将内核从rom中拷贝至ram中,建立bss段,依次建立sys stack, irq stack和fiq stack,最后初始化timer,建立timer HISR的栈空间,看了一下2410平台的代码,一个tick大概是15.8ms,完成板级的初始化后就进入了INC_initialize。
inc.c:
- /*************************************************************************/
- /* */
- /* Copyright Mentor Graphics Corporation 2002 */
- /* All Rights Reserved. */
- /* */
- /* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS */
- /* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS */
- /* SUBJECT TO LICENSE TERMS. */
- /* */
- /*************************************************************************/
- /*************************************************************************/
- /* */
- /* FILE NAME VERSION */
- /* */
- /* inc.c Nucleus PLUS 1.14 */
- /* */
- /* COMPONENT */
- /* */
- /* IN - Initialization */
- /* */
- /* DESCRIPTION */
- /* */
- /* This file contains initialization and setup routines associated */
- /* with the initialization component. */
- /* */
- /* DATA STRUCTURES */
- /* */
- /* None */
- /* */
- /* FUNCTIONS */
- /* */
- /* INC_Initialize Common system initialization */
- /* */
- /* DEPENDENCIES */
- /* */
- /* in_extr.h Initialization functions */
- /* er_extr.h Error handling function */
- /* hi_extr.h History functions */
- /* tc_extr.h Thread Control functions */
- /* mb_extr.h Mailbox functions */
- /* qu_extr.h Queue functions */
- /* pi_extr.h Pipe functions */
- /* sm_extr.h Semaphore functions */
- /* ev_extr.h Event group functions */
- /* pm_extr.h Partition memory functions */
- /* dm_extr.h Dynamic memory functions */
- /* tm_extr.h Timer functions */
- /* io_extr.h I/O Driver functions */
- /* */
- /* HISTORY */
- /* */
- /* DATE REMARKS */
- /* */
- /* 03-01-1993 Created initial version 1.0 */
- /* 04-19-1993 Verified version 1.0 */
- /* 03-01-1994 Replaced void with VOID, */
- /* resulting in version 1.1 */
- /* */
- /* 03-18-1994 Verified version 1.1 */
- /* 04-17-1996 updated to version 1.2 */
- /* 03-20-1998 Moved the INC_Initialize_State */
- /* define values into their own */
- /* in_defs.h include file as part */
- /* of SPR455. This creates */
- /* version 1.2a. */
- /* 03-24-1998 Released version 1.3. */
- /* 03-26-1999 Released 1.11m (new release */
- /* numbering scheme) */
- /* 04-17-2002 Released version 1.13m */
- /* 11-07-2002 Released version 1.14 */
- /*************************************************************************/
- #define NU_SOURCE_FILE
- #include "in_defs.h" /* Initialization defines */
- #include "in_extr.h" /* Initialization functions */
- #include "hi_extr.h" /* History functions */
- #include "er_extr.h" /* Error handling function */
- #include "tc_extr.h" /* Thread Control functions */
- #include "mb_extr.h" /* Mailbox functions */
- #include "qu_extr.h" /* Queue functions */
- #include "pi_extr.h" /* Pipe functions */
- #include "sm_extr.h" /* Semaphore functions */
- #include "ev_extr.h" /* Event group functions */
- #include "pm_extr.h" /* Partition memory functions*/
- #include "dm_extr.h" /* Dynamic memory functions */
- #include "tm_extr.h" /* Timer functions */
- #include "io_extr.h" /* I/O Driver functions */
- /* Define global variable that contains the state of initialization. This
- flag is for information use only. */
- INT INC_Initialize_State;
- /* Define external functions that access the release and license
- information. */
- CHAR *RLC_Release_Information(VOID);
- CHAR *LIC_License_Information(VOID);
- #if defined(NU_MODULE_SUPPORT) && (NU_MODULE_SUPPORT > 0)
- /* Prototypes for Module Initialization funcitons */
- STATUS MRC_Initialize(VOID);
- STATUS MSC_Initialize(VOID);
- #endif
- /*************************************************************************/
- /* */
- /* FUNCTION */
- /* */
- /* INC_Initialize */
- /* */
- /* DESCRIPTION */
- /* */
- /* This function is the main initialization function of the system. */
- /* All components are initialized by this function. After system */
- /* initialization is complete, the Application_Initialize routine */
- /* is called. After all initialization is complete, this function */
- /* calls TCT_Schedule to start scheduling tasks. */
- /* */
- /* CALLED BY */
- /* */
- /* INT_Initialize Target dependent initialize */
- /* */
- /* CALLS */
- /* */
- /* Application_Initialize Application initialize */
- /* RLC_Release_Information Release information */
- /* LIC_License_Information License information */
- /* ERI_Initialize Error handling initialize */
- /* HII_Initialize History initialization */
- /* TCI_Initialize Thread control initialize */
- /* MBI_Initialize Mailbox initialize */
- /* QUI_Initialize Queue initialize */
- /* PII_Initialize Pipe initialize */
- /* SMI_Initialize Semaphore initialize */
- /* EVI_Initialize Event flag initialize */
- /* PMI_Initialize Partition memory initialize */
- /* DMI_Initialize Dynamic memory initialize */
- /* TMI_Initialize Timer initialize */
- /* IOI_Initialize I/O Driver initialize */
- /* MRC_Initialize Memory Region initialize */
- /* MSC_Initialize Module Support initialize */
- /* TCT_Schedule Thread scheduling loop */
- /* */
- /* INPUTS */
- /* */
- /* first_available_memory Pointer to available memory */
- /* */
- /* OUTPUTS */
- /* */
- /* None */
- /* */
- /* HISTORY */
- /* */
- /* DATE REMARKS */
- /* */
- /* 03-01-1993 Created initial version 1.0 */
- /* 04-19-1993 Verified version 1.0 */
- /* */
- /*************************************************************************/
- VOID INC_Initialize(VOID *first_available_memory)
- {
- /* Indicate that initialization is starting. */
- INC_Initialize_State = INC_START_INITIALIZE;
- /* Call release information function. */
- RLC_Release_Information();
- /* Call license information function. */
- LIC_License_Information();
- /* Initialize the Error handling (ER) component. */
- ERI_Initialize();
- /* Initialize the History (HI) component. */
- HII_Initialize();
- #if defined(NU_MODULE_SUPPORT) && (NU_MODULE_SUPPORT > 0)
- MRC_Initialize(); /* Initialize Memory Region component */
- MSC_Initialize(); /* Initialize Module Support component */
- #endif
- /* Initialize the Thread Control (TC) component. */
- TCI_Initialize();
- /* Initialize the Mailbox (MB) component. */
- MBI_Initialize();
- /* Initialize the Queue (QU) component. */
- QUI_Initialize();
- /* Initialize the Pipe (PI) component. */
- PII_Initialize();
- /* Initialize the Semaphore (SM) component. */
- SMI_Initialize();
- /* Initialize the Event Group (EV) component. */
- EVI_Initialize();
- /* Initialize the Partition memory (PM) component. */
- PMI_Initialize();
- /* Initialize the Dynamic memory (DM) component. */
- DMI_Initialize();
- /* Initialize the Timer (TM) component. */
- TMI_Initialize();
- /* Initialize the I/O Driver (IO) component. */
- IOI_Initialize();
- /* Invoke the application-supplied initialization function. */
- Application_Initialize(first_available_memory); //应用程序初始化
- /* Indicate that initialization is finished. */
- INC_Initialize_State = INC_END_INITIALIZE;
- /* Start scheduling threads of execution. */
- TCT_Schedule();
- }
到这里找不到函数了。。。
csc.c:包含nucleus plus系统中使用的连接表处理工具,采用双向循环链表(doubley-linked circulat lists)
dmc.c:包含动态内存管理组件的核心事务
dmce.c:包含动态内存管理组件中的函数错误检查例程,可以关闭?
dmd.c:包含动态内存管理组件中的全局数据结构
dmf.c:包含获取管理动态内存管理组件的事实的例程
dmi.c:包含动态内存管理组件的初始化例程
dms.c:包含动态内存管理组件的补充例程
erc.c:包含错误管理组件的核心事务
erd.c:包含错误管理组件的官居数据结构
eri.c:包含错误管理组件初始化例程
evc.c:包含事件组管理组件核心事务
evce.c:包含事件组错误检查
evd.c:事件组全局数据结构
evf.c
evi.c
hic.c:包含历史管理组件的核心事务
hid.c
hii.c
inc.c
int.s
ioc.c:I/O驱动管理核心事务
ioce.c
iod.c
iof.c
ioi.c
lic.c:license informations组件核心事务
lid.c
mbc.c:邮箱管理组件核心事务
mbce.c
mbd.c
mbf.c
mbi.c
mbs.c
mbse.c
pic.c:管道管理核心事务
pice.c
pid.c
pif.c
pii.c
pis.c
pise.c
pmc.c:内存管理划分(partition)核心事务
pmce.c
pmd.c
pmf.c
pmi.c
quc.c:队列管理核心事务
quce.c
qud.c
quf.c
qui.c
qus.c
quse.c
rlc.c:版本信息(Release Information)核心事务
rld.c
sdc.c:包含串行驱动特定功能
smc.c:信号量管理核心事务
smce.c
smd.c
smd.c
smf.c
smi.c
sms.c
smse.c
tcc.c:进程控制
tcce.c
tcd.c
tcf.c
tci.c
tcs.c
tcse.c
tct.s
tmc.c:此函数负责提供初始化的任务定时器,此程序必须在svc/usr模式下内核切换成svc模式运行。
tmd.c
tmf.c
tmi.c
tms.c
tmse.c
tmt.s
文件命名前2个字母是组件的缩写,后面的字母是不同的文件。
d包含了相关全局变量,i是初始化部分,f是组件管理的对象的信息,c是核心函数,ce是错误处理,se是补充。
nucleus plus代码学习的更多相关文章
- u-boot代码学习内容
前言 u-boot代码庞大,不可能全部细读,只能有选择的读部分代码.在读代码之前,根据韦东山教材,关于代码学习内容和深度做以下预先划定. 一.Makefile.mkconfig.config.mk等 ...
- Objective-C代码学习大纲(3)
Objective-C代码学习大纲(3) 2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍 ...
- ORB-SLAM2 论文&代码学习 ——Tracking 线程
本文要点: ORB-SLAM2 Tracking 线程 论文内容介绍 ORB-SLAM2 Tracking 线程 代码结构介绍 写在前面 上一篇文章中我们已经对 ORB-SLAM2 系统有了一个概览性 ...
- ORB-SLAM2 论文&代码学习 —— 单目初始化
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12358458.html 本文要点: ORB-SLAM2 单目初始化 ...
- ORB-SLAM2 论文&代码学习 —— LocalMapping 线程
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12360913.html 本文要点: ORB-SLAM2 Local ...
- Learning Memory-guided Normality代码学习笔记
Learning Memory-guided Normality代码学习笔记 记忆模块核心 Memory部分的核心在于以下定义Memory类的部分. class Memory(nn.Module): ...
- 3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习
3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习 Hello小崔 华为技术有限公司 Linux内核开发 2 人赞同了该文章 LTP代码学习方法主要介绍两个步骤, ...
- Apollo代码学习(七)—MPC与LQR比较
前言 Apollo中用到了PID.MPC和LQR三种控制器,其中,MPC和LQR控制器在状态方程的形式.状态变量的形式.目标函数的形式等有诸多相似之处,因此结合自己目前了解到的信息,将两者进行一定的比 ...
- Dagger2 生成代码学习
接上一篇文章介绍了Dagger2的初步使用,相信刚接触的人会觉得很奇怪,怎么会有很多自己没有定义的代码出现,为什么Component的创建方式是那样的.为了搞清楚这些东西,我们需要查看一下Dagger ...
随机推荐
- Linux基础优化(二)
Linux基础优化(二) 一操作系统字符优化 避免出现中文乱码,UTF-8支持中文GBK-Xx支持中文 (一)查看默认编码 [root@centos7 ~]# echo $LANG en_US.UTF ...
- Delphi ListView的用法
//增加 i := ListView1.Items.Count; with ListView1 do begin ListItem:=Items.Add; ListItem.Caption:= Int ...
- Pasha and Tea
Pasha and Tea time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- [CSP-S模拟测试]:gcd(莫比乌斯反演)
题目描述 有$n$个正整数$x_1\sim x_n$,初始时状态均为未选.有$m$个操作,每个操作给定一个编号$i$,将$x_i$的选取状态取反.每次操作后,你需要求出选取的数中有多少个互质的无序数对 ...
- pytho装饰器参数那些事_inspect.getcallargs
''' Created on Jul 26, 2019 @author: tomcat ''' import inspect def chack_admin(func): def wrapper(*a ...
- Openstack API 类型 & REST 风格
目录 目录 Openstack 提供了三种操作方式 Web界面 CIL 指令行 RESTful API REST 风格 RESTFul风格的API设计 基于HTTP协议的RESTful API Ope ...
- 微众银行c++选择题后记
一个类的成员可以有:另一个类的对象,类的自身指针,自身类对象的引用(私有的如何初始化呢,所以不行,换成静态的可以),自身类对象(构造时如何初始化呢?) class A{ public: A(){} A ...
- Use sed and awk to prettify json
$ cat prettify.sed s/,/,\r\n/g s/\[/\r\n\[\r\n/g s/\]/\r\n\]\r\n/g s/{/\r\n{\r\n/g s/}/\r\n}\r\n/g $ ...
- Cocos2d 之FlyBird开发---GameData类
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 现在是大数据的时代,绝大多数的游戏也都离不开游戏数据的控制,简单的就是一般记录游戏的得分情况,高端大气上档次一点的就是记录和保存各方面的游 ...
- Pycharm2019版官方版本激活码,无需破解
AHD9079DKZ-eyJsaWNlbnNlSWQiOiJBSEQ5MDc5REtaIiwibGljZW5zZWVOYW1lIjoiSmV0IEdyb3VwcyIsImFzc2lnbmVlTmFtZ ...