int.S:

  1. ;************************************************************************
  2. ;*
  3. ;* FUNCTION
  4. ;*
  5. ;* INT_Initialize
  6. ;*
  7. ;* DESCRIPTION
  8. ;*
  9. ;* This function sets up the global system stack variable and
  10. ;* transfers control to the target independent initialization
  11. ;* function INC_Initialize. Responsibilities of this function
  12. ;* include the following:
  13. ;*
  14. ;* - Setup necessary processor/system control registers
  15. ;* - Initialize the vector table
  16. ;* - Setup the system stack pointers
  17. ;* - Setup the timer interrupt
  18. ;* - Calculate the timer HISR stack and priority
  19. ;* - Calculate the first available memory address
  20. ;* - Transfer control to INC_Initialize to initialize all of
  21. ;* the system components.
  22. ;*
  23. ;* Major Revision:
  24. ;*
  25. ;* M. Kyle Craig, Accelerated Technology, Inc.
  26. ;*
  27. ;*
  28. ;*
  29. ;*
  30. ;* CALLED BY
  31. ;*
  32. ;* Nothing. This function is the ENTRY point for Nucleus PLUS.
  33. ;*
  34. ;* CALLS
  35. ;*
  36. ;* INC_Initialize Common initialization
  37. ;*
  38. ;* INPUTS
  39. ;*
  40. ;* None
  41. ;*
  42. ;* OUTPUTS
  43. ;*
  44. ;* None
  45. ;*
  46. ;* HISTORY
  47. ;*
  48. ;* NAME DATE REMARKS
  49. ;*
  50. ;* W. Lamie 08-27-1994 Created initial version 1.0
  51. ;* D. Lamie 08-27-1994 Verified version 1.0
  52. ;*
  53. ;************************************************************************
  54. ;VOID INT_Initialize(void)
  55. ;{
  56. .def _c_int00
  57. _c_int00
  58. .def _INT_Initialize
  59. _INT_Initialize:
  60. ; Insure that the processor is in supervisor mode.                                                                    //设置了arm的svc模式
  61. MRS r0,CPSR ; Pickup current CPSR
  62. BIC r0,r0,#MODE_MASK ; Clear the mode bits
  63. ORR r0,r0,#SUP_MODE ; Set the supervisor mode bits
  64. ORR r0,r0,#LOCKOUT ; Insure IRQ/FIQ interrupts are                                                                   //关闭中断
  65. ; locked out
  66. MSR CPSR,r0 ; Setup the new CPSR
  67. ; Clear the un-initialized global and static C data areas.
  68. LDR r0,BSS_Start ; Pickup the start of the BSS area
  69. MOV r2,#0 ; Clear value in r2
  70. LDR r1,BSS_End ; Pickup the end of the BSS area
  71. INT_BSS_Clear_Loop
  72. STR r2,[r0],#4 ; Clear a word                                                                                      //初始化Bss段
  73. INT_BSS_Clear_Check
  74. CMP r0,r1 ; Are the start and end equal?
  75. BNE INT_BSS_Clear_Loop ; If so, continue with BSS clear
  76. ; Perform auto-initialization. if cinit is -1, then there is none.
  77. LDR r0, c_cinit
  78. CMN r0, #1
  79. BLNE _auto_init
  80. ; Turn-on the I-Cache for the TI 925T Processor                                                                    //开启I-Cache
  81. MRC p15,#0,r1,C1,C0,#0 ; Read the control register.
  82. ORR r1,r1,#0x1000 ; Set the I bit to enable Instruction Cache
  83. NOP
  84. MCR p15,#0,r1,C1,C0,#0 ; Write the control register.
  85. ; Setup the vectors loaded flag to indicate to other routines in the
  86. ; system whether or not all of the default vectors have been loaded.
  87. ; If INT_Loaded_Flag is 1, all of the default vectors have been loaded.
  88. ; Otherwise, if INT_Loaded_Flag is 0, registering an LISR cause the
  89. ; default vector to be loaded. In the ARM60 this variable is always
  90. ; set to 1. All vectors must be setup by this function.
  91. ; INT_Loaded_Flag = 0;
  92. MOV r0,#1 ; All vectors are assumed loaded
  93. LDR r1,Loaded_Flag ; Build address of loaded flag
  94. STR r0,[r1,#0] ; Initialize loaded flag
  95. ; Initialize the system stack pointers. This is done after the BSS is
  96. ; clear because the TCD_System_Stack pointer is a BSS It is
  97. ; assumed that available memory starts immediately after the end of the
  98. ; BSS section.                                                                                                                       //建立sys stack
  99. LDR r10,System_Stk_Limit ; Pickup the system stack limit (bottom of system stack)
  100. LDR r3,System_Limit ; Pickup sys stack limit addr
  101. STR r10,[r3, #0] ; Save stack limit
  102. LDR sp,System_Stack_SP ; Set-up the system stack pointer
  103. LDR r3,System_Stack ; Pickup system stack address
  104. STR sp,[r3, #0] ; Save stack pointer
  105. MRS r0,CPSR ; Pickup current CPSR
  106. BIC r0,r0,#MODE_MASK ; Clear the mode bits
  107. ORR r0,r0,#IRQ_MODE ; Set the IRQ mode bits
  108. MSR CPSR,r0 ; Move to IRQ mode
  109. LDR sp,IRQ_Stack_SP ; Setup IRQ stack pointer
  110. MRS r0,CPSR ; Pickup current CPSR
  111. BIC r0,r0,#MODE_MASK ; Clear the mode bits
  112. ORR r0,r0,#FIQ_MODE ; Set the FIQ mode bits
  113. MSR CPSR,r0 ; Move to the FIQ mode
  114. LDR sp,FIQ_Stack_SP ; Setup FIQ stack pointer
  115. MRS r0,CPSR ; Pickup current CPSR
  116. BIC r0,r0,#MODE_MASK ; Clear mode bits
  117. ORR r0,r0,#SUP_MODE ; Set the supervisor mode bits
  118. MSR CPSR,r0 ; All interrupt stacks are setup,
  119. ; return to supervisor mode
  120. ; Define the global data structures that need to be initialized by this                                                                  //设置中断
  121. ; routine. These structures are used to define the system timer
  122. ; management HISR.
  123. ; TMD_HISR_Stack_Ptr = (VOID *) r2;
  124. ; TMD_HISR_Stack_Size = TIMER_SIZE;
  125. ; TMD_HISR_Priority = TIMER_PRIORITY;
  126. LDR r2,HISR_Stack_Mem ; Get HISR stack memory address
  127. LDR r3,HISR_Stack_Ptr ; Pickup variable's address
  128. STR r2,[r3, #0] ; Setup timer HISR stack pointer
  129. MOV r1,#HISR_STACK_SIZE ; Pickup the timer HISR stack size
  130. LDR r3,HISR_Stack_Size ; Pickup variable's address
  131. STR r1,[r3, #0] ; Setup timer HISR stack size
  132. MOV r1,#HISR_PRIORITY ; Pickup timer HISR priority (0-2)
  133. LDR r3,HISR_Priority ; Pickup variable's address
  134. STR r1,[r3, #0] ; Setup timer HISR priority
  135. ; Make a call to begin all board specific initialization.                                                                                //初始化时钟
  136. ; Begin with Initializing the Vector table and replacing
  137. ; default interrupts with Plus IRQs. Then setup the timer
  138. ; and begin the system clock.
  139. .if $$isdefed("NU_ROM_SUPPORT")
  140. BL _INT_Timer_Initialize ; Initialize the timer
  141. .else
  142. BL INT_Install_Vector_Table ; Install the vector table
  143. BL _INT_Timer_Initialize ; Initialize the timer
  144. .endif
  145. ; Call INC_Initialize with a pointer to the first available memory
  146. ; address after the compiler's global data. This memory may be used
  147. ; by the application.
  148. ; INC_Initialize(first_available_memory);
  149. LDR r0,First_Avail_Mem ; Get address of first available memory
  150. B _INC_Initialize ; to high-level initialization                                                                                       //最后跳转到_INC_Initialize,找不到函数在哪
  151. ;}
  152. 。。。。。。
  153. 。。。。。。

初始化组件由三个部分组成,硬件在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:

  1. /*************************************************************************/
  2. /* */
  3. /* Copyright Mentor Graphics Corporation 2002 */
  4. /* All Rights Reserved. */
  5. /* */
  6. /* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS */
  7. /* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS */
  8. /* SUBJECT TO LICENSE TERMS. */
  9. /* */
  10. /*************************************************************************/
  11. /*************************************************************************/
  12. /* */
  13. /* FILE NAME VERSION */
  14. /* */
  15. /* inc.c Nucleus PLUS 1.14 */
  16. /* */
  17. /* COMPONENT */
  18. /* */
  19. /* IN - Initialization */
  20. /* */
  21. /* DESCRIPTION */
  22. /* */
  23. /* This file contains initialization and setup routines associated */
  24. /* with the initialization component. */
  25. /* */
  26. /* DATA STRUCTURES */
  27. /* */
  28. /* None */
  29. /* */
  30. /* FUNCTIONS */
  31. /* */
  32. /* INC_Initialize Common system initialization */
  33. /* */
  34. /* DEPENDENCIES */
  35. /* */
  36. /* in_extr.h Initialization functions */
  37. /* er_extr.h Error handling function */
  38. /* hi_extr.h History functions */
  39. /* tc_extr.h Thread Control functions */
  40. /* mb_extr.h Mailbox functions */
  41. /* qu_extr.h Queue functions */
  42. /* pi_extr.h Pipe functions */
  43. /* sm_extr.h Semaphore functions */
  44. /* ev_extr.h Event group functions */
  45. /* pm_extr.h Partition memory functions */
  46. /* dm_extr.h Dynamic memory functions */
  47. /* tm_extr.h Timer functions */
  48. /* io_extr.h I/O Driver functions */
  49. /* */
  50. /* HISTORY */
  51. /* */
  52. /* DATE REMARKS */
  53. /* */
  54. /* 03-01-1993 Created initial version 1.0 */
  55. /* 04-19-1993 Verified version 1.0 */
  56. /* 03-01-1994 Replaced void with VOID, */
  57. /* resulting in version 1.1 */
  58. /* */
  59. /* 03-18-1994 Verified version 1.1 */
  60. /* 04-17-1996 updated to version 1.2 */
  61. /* 03-20-1998 Moved the INC_Initialize_State */
  62. /* define values into their own */
  63. /* in_defs.h include file as part */
  64. /* of SPR455. This creates */
  65. /* version 1.2a. */
  66. /* 03-24-1998 Released version 1.3. */
  67. /* 03-26-1999 Released 1.11m (new release */
  68. /* numbering scheme) */
  69. /* 04-17-2002 Released version 1.13m */
  70. /* 11-07-2002 Released version 1.14 */
  71. /*************************************************************************/
  72. #define NU_SOURCE_FILE
  73. #include "in_defs.h" /* Initialization defines */
  74. #include "in_extr.h" /* Initialization functions */
  75. #include "hi_extr.h" /* History functions */
  76. #include "er_extr.h" /* Error handling function */
  77. #include "tc_extr.h" /* Thread Control functions */
  78. #include "mb_extr.h" /* Mailbox functions */
  79. #include "qu_extr.h" /* Queue functions */
  80. #include "pi_extr.h" /* Pipe functions */
  81. #include "sm_extr.h" /* Semaphore functions */
  82. #include "ev_extr.h" /* Event group functions */
  83. #include "pm_extr.h" /* Partition memory functions*/
  84. #include "dm_extr.h" /* Dynamic memory functions */
  85. #include "tm_extr.h" /* Timer functions */
  86. #include "io_extr.h" /* I/O Driver functions */
  87. /* Define global variable that contains the state of initialization. This
  88. flag is for information use only. */
  89. INT INC_Initialize_State;
  90. /* Define external functions that access the release and license
  91. information. */
  92. CHAR *RLC_Release_Information(VOID);
  93. CHAR *LIC_License_Information(VOID);
  94. #if defined(NU_MODULE_SUPPORT) && (NU_MODULE_SUPPORT > 0)
  95. /* Prototypes for Module Initialization funcitons */
  96. STATUS MRC_Initialize(VOID);
  97. STATUS MSC_Initialize(VOID);
  98. #endif
  99. /*************************************************************************/
  100. /* */
  101. /* FUNCTION */
  102. /* */
  103. /* INC_Initialize */
  104. /* */
  105. /* DESCRIPTION */
  106. /* */
  107. /* This function is the main initialization function of the system. */
  108. /* All components are initialized by this function. After system */
  109. /* initialization is complete, the Application_Initialize routine */
  110. /* is called. After all initialization is complete, this function */
  111. /* calls TCT_Schedule to start scheduling tasks. */
  112. /* */
  113. /* CALLED BY */
  114. /* */
  115. /* INT_Initialize Target dependent initialize */
  116. /* */
  117. /* CALLS */
  118. /* */
  119. /* Application_Initialize Application initialize */
  120. /* RLC_Release_Information Release information */
  121. /* LIC_License_Information License information */
  122. /* ERI_Initialize Error handling initialize */
  123. /* HII_Initialize History initialization */
  124. /* TCI_Initialize Thread control initialize */
  125. /* MBI_Initialize Mailbox initialize */
  126. /* QUI_Initialize Queue initialize */
  127. /* PII_Initialize Pipe initialize */
  128. /* SMI_Initialize Semaphore initialize */
  129. /* EVI_Initialize Event flag initialize */
  130. /* PMI_Initialize Partition memory initialize */
  131. /* DMI_Initialize Dynamic memory initialize */
  132. /* TMI_Initialize Timer initialize */
  133. /* IOI_Initialize I/O Driver initialize */
  134. /* MRC_Initialize Memory Region initialize */
  135. /* MSC_Initialize Module Support initialize */
  136. /* TCT_Schedule Thread scheduling loop */
  137. /* */
  138. /* INPUTS */
  139. /* */
  140. /* first_available_memory Pointer to available memory */
  141. /* */
  142. /* OUTPUTS */
  143. /* */
  144. /* None */
  145. /* */
  146. /* HISTORY */
  147. /* */
  148. /* DATE REMARKS */
  149. /* */
  150. /* 03-01-1993 Created initial version 1.0 */
  151. /* 04-19-1993 Verified version 1.0 */
  152. /* */
  153. /*************************************************************************/
  154. VOID INC_Initialize(VOID *first_available_memory)
  155. {
  156. /* Indicate that initialization is starting. */
  157. INC_Initialize_State = INC_START_INITIALIZE;
  158. /* Call release information function. */
  159. RLC_Release_Information();
  160. /* Call license information function. */
  161. LIC_License_Information();
  162. /* Initialize the Error handling (ER) component. */
  163. ERI_Initialize();
  164. /* Initialize the History (HI) component. */
  165. HII_Initialize();
  166. #if defined(NU_MODULE_SUPPORT) && (NU_MODULE_SUPPORT > 0)
  167. MRC_Initialize(); /* Initialize Memory Region component */
  168. MSC_Initialize(); /* Initialize Module Support component */
  169. #endif
  170. /* Initialize the Thread Control (TC) component. */
  171. TCI_Initialize();
  172. /* Initialize the Mailbox (MB) component. */
  173. MBI_Initialize();
  174. /* Initialize the Queue (QU) component. */
  175. QUI_Initialize();
  176. /* Initialize the Pipe (PI) component. */
  177. PII_Initialize();
  178. /* Initialize the Semaphore (SM) component. */
  179. SMI_Initialize();
  180. /* Initialize the Event Group (EV) component. */
  181. EVI_Initialize();
  182. /* Initialize the Partition memory (PM) component. */
  183. PMI_Initialize();
  184. /* Initialize the Dynamic memory (DM) component. */
  185. DMI_Initialize();
  186. /* Initialize the Timer (TM) component. */
  187. TMI_Initialize();
  188. /* Initialize the I/O Driver (IO) component. */
  189. IOI_Initialize();
  190. /* Invoke the application-supplied initialization function. */
  191. Application_Initialize(first_available_memory);                                            //应用程序初始化
  192. /* Indicate that initialization is finished. */
  193. INC_Initialize_State = INC_END_INITIALIZE;
  194. /* Start scheduling threads of execution. */
  195. TCT_Schedule();
  196. }

到这里找不到函数了。。。

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代码学习的更多相关文章

  1. u-boot代码学习内容

    前言  u-boot代码庞大,不可能全部细读,只能有选择的读部分代码.在读代码之前,根据韦东山教材,关于代码学习内容和深度做以下预先划定. 一.Makefile.mkconfig.config.mk等 ...

  2. Objective-C代码学习大纲(3)

    Objective-C代码学习大纲(3) 2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍 ...

  3. ORB-SLAM2 论文&代码学习 ——Tracking 线程

    本文要点: ORB-SLAM2 Tracking 线程 论文内容介绍 ORB-SLAM2 Tracking 线程 代码结构介绍 写在前面 上一篇文章中我们已经对 ORB-SLAM2 系统有了一个概览性 ...

  4. ORB-SLAM2 论文&代码学习 —— 单目初始化

    转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12358458.html 本文要点: ORB-SLAM2 单目初始化 ...

  5. ORB-SLAM2 论文&代码学习 —— LocalMapping 线程

    转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12360913.html 本文要点: ORB-SLAM2 Local ...

  6. Learning Memory-guided Normality代码学习笔记

    Learning Memory-guided Normality代码学习笔记 记忆模块核心 Memory部分的核心在于以下定义Memory类的部分. class Memory(nn.Module): ...

  7. 3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习

    3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习 Hello小崔 ​ 华为技术有限公司 Linux内核开发 2 人赞同了该文章 LTP代码学习方法主要介绍两个步骤, ...

  8. Apollo代码学习(七)—MPC与LQR比较

    前言 Apollo中用到了PID.MPC和LQR三种控制器,其中,MPC和LQR控制器在状态方程的形式.状态变量的形式.目标函数的形式等有诸多相似之处,因此结合自己目前了解到的信息,将两者进行一定的比 ...

  9. Dagger2 生成代码学习

    接上一篇文章介绍了Dagger2的初步使用,相信刚接触的人会觉得很奇怪,怎么会有很多自己没有定义的代码出现,为什么Component的创建方式是那样的.为了搞清楚这些东西,我们需要查看一下Dagger ...

随机推荐

  1. 趣头条基于 Flink 的实时平台建设实践

    本文由趣头条实时平台负责人席建刚分享趣头条实时平台的建设,整理者叶里君.文章将从平台的架构.Flink 现状,Flink 应用以及未来计划四部分分享. 一.平台架构 1.Flink 应用时间线 首先是 ...

  2. SQL查看所有表的大小

    --查看所有表的大小 declare @id int ) declare @pages int declare @dbname sysname ,) ,) ,) create table #spt_s ...

  3. S1.2 Python开发规范指南

    参考链接 Python风格规范 分号 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 每行不超过80个字符 例外: 长的导入模块语句 注释里的URL 不要使用反斜杠连接行. Pytho ...

  4. 1-什么是 Prometheus

    什么是 Prometheus Prometheus 是由 SoundCloud 开源监控告警解决方案,从 2012 年开始编写代码,再到 2015 年 github 上开源以来,已经吸引了 9k+ 关 ...

  5. [codeforces 508E]Maximum Matching

    题目:Maximum Matching 传送门:http://codeforces.com/contest/1038/problem/E 分析: 一个块拥有{color1,val,color2},两个 ...

  6. (转载)虚拟机出现无法连接虚拟设备sata0:0,因为主机上没有相应设备

    虚拟主机需要镜像文件, 如果是拷贝的虚拟机,还需要桥接联网的话,更改mac地址,

  7. hdu 5564 Clarke and digits

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5564 ------------------------------------------------ ...

  8. Configuring IPMI under Linux using ipmitool

    http://www.thomas-krenn.com/en/wiki/Configuring_IPMI_under_Linux_using_ipmitool Configuring IPMI und ...

  9. (67) c# 序列化

    二进制序列化器 xml序列化器 数据契约序列化器

  10. appium常见问题06_如何解决uiaotomator定位工具报错

    在使用uiaotomator工具定位元素过程中,经常会弹出报错,截图失败,导致无法定位元素,当遇到该问题时,解决办法如下: 方法一:拔掉手机usb连接,重新连接手机 方法二:adb杀掉手机服务,重起服 ...