⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nucluesnotes.txt

📁 nucleus移植文档
💻 TXT
字号:
;interrupt vector table
////////////////////////////////////////////
	B	INT_Initialize
	B 	HandlerUndef
	B	HandlerSWI	
	B	HandlerPabort
	B	HandlerDabort
	B   .	; NO LONGER USED
	B	HandlerIRQ	
	B	HandlerFIQ
///////////////////////////////////////////
;VOID    INT_Initialize(void)
;{
   EXPORT  INT_Initialize
   INT_Initialize

   ; 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           

   B  INC_Initialize  ;Transfer control to INC_Initialize to initialize all of the system components.                                  ;} 
///////////////////////////////////////////
VOID  INC_Initialize(VOID  *first_available_memory)
{
  OS kernal 初始化

    Application_Initialize(first_available_memory);
    INC_Initialize_State =  INC_END_INITIALIZE;

    TCT_Schedule();  //开始调度
}

VOID  Application_Initialize(VOID *first_available_memory)
{
   目标板、应用初始化
 定义应用程序的任务、邮箱、队列、管道、事件集、内存池等
}


/////////////////////////////////////////////
优先级号为0~255,数字越小优先级越高。
不同优先级的任务间通过抢占方式执行
相同优先级的任务间采用时间片轮转方式,其先后顺序与进入就绪状态的先后顺序一致。

NucleusOS中,可供调度的线程有: HISR(high-priority interrupt service)和task。
HISR是一种高优先级的中断服务例程(拥有自己的堆栈),区别于LISR。
Task分为前台应用和后台服务两类(后者优先级一般大于前者),这些任务可以指定是否支持时间片轮转。

HISR有4个优先级(0~3),Task的优先级为0~255。 调度时HISR的优先级大于Task。
调度线程的优先级由优先级队列维护,只有高优先级的队列处理完了,才会处理低优先级的队列。
同一队列中的任务如果是分时间片而且可抢夺(设置了可抢夺preemption标志),则该队列还会进行时间片用完的任务切换。
由于HISR优先级特别高,所以HISR不能用于处理复杂的任务,否则系统一直处理HISR,其它任务得不到响应。

LISR是低优先级的中断处理函数,每个芯片的ISR函数在模块初始化的时候注册到系统中,在中断产生后,系统会根据中断号调用相应的模块注册的处理函数。

HISR的运行可以由LISR激活,此时的中断处理流程就是:
   芯片产生中断调用LISR -> 在LISR中把这个中断MASK掉 -> 激活相应的HISR  
   -> 系统自动调用HISR,在HISR中查看产生何种中断,相应的处理,在HISR退出的时候恢复被LISR屏蔽的中断,允许后续中断得到响应。

////////////////////////////////////////////////
Nucleus与ASIXOS的任务调度方式大致相同,但要注意一点区别是:
ASIXOS在任务创建时,任务的执行入口直接指向指定的函数。
Nucleus在任务创建时,任务的执行入口指向Nucleus自已的函数task_shell,在task_shell中先执行任务定义时所指定的函数,执行完后,task_shell会将当时任务挂起到完成队列。
NUclues中的HISR与任务的的调度执行方式基本相同,统称线程调度。
对于AsixOS,线程中必须使用死循环方式,而在Nucleus中的线程就不需要这样做,因为Nucleus的线程封装了执行完退出本线程的代码。




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -