b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c/s结构由三个 ARM中断处理过程(2)

电脑杂谈  发布时间:2018-02-14 03:31:11  来源:网络整理

"msr cpsr_c, %5\n\t"

"add r14, %0, %6\n\t"

"mov sp, r14\n\t"--------设定und mode的stack为stk->und

"msr cpsr_c, %7"--------回到SVC mode

:--------------------上面是code,下面的output部分是空的

: "r" (stk),----------------------对应上面代码中的%0

PLC (PSR_F_BIT | PSR_I_BIT | IRQ_MODE),------对应上面代码中的%1

"I" (offsetof(struct stack, irq[0])),------------对应上面代码中的%2

PLC (PSR_F_BIT | PSR_I_BIT | ABT_MODE),------以此类推,下面不赘述

"I" (offsetof(struct stack, abt[0])),

PLC (PSR_F_BIT | PSR_I_BIT | UND_MODE),

"I" (offsetof(struct stack, und[0])),

PLC (PSR_F_BIT | PSR_I_BIT | SVC_MODE)

: "r14");--------上面是input操作数列表,r14是要clobbered register列表

}

嵌入式汇编的语法格式是:asm(code : output operand list : input operand list : clobber list);大家对着上面的code就可以分开各段内容了。在input operand list中,有两种限制符(constraint),"r"或者"I","I"表示立即数(Immediate operands),"r"表示用通用寄存器传递参数。clobber list中有一个r14,表示在汇编代码中修改了r14的值,这些信息是编译器需要的内容。

对于SMP,bootstrap CPU会在系统初始化的时候执行cpu_init函数,进行本CPU的irq、abt和und三种模式的内核栈的设定,具体调用序列是:start_kernel--->setup_arch--->setup_processor--->cpu_init。对于系统中其他的CPU,bootstrap CPU会在系统初始化的最后,对每一个online的CPU进行初始化,具体的调用序列是:start_kernel--->rest_init--->kernel_init--->kernel_init_freeable--->kernel_init_freeable--->smp_init--->cpu_up--->_cpu_up--->__cpu_up。__cpu_up函数是和CPU architecture相关的。对于ARM,其调用序列是__cpu_up--->boot_secondary--->smp_ops.smp_boot_secondary(SOC相关代码)--->secondary_startup--->__secondary_switched--->secondary_start_kernel--->cpu_init。

除了初始化,系统电源管理也需要irq、abt和und stack的设定。如果我们设定的电源管理状态在进入sleep的时候,CPU会丢失irq、abt和und stack point寄存器的值,那么在CPU resume的过程中,要调用cpu_init来重新设定这些值。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-76601-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 张闪闪
      张闪闪

      你如果在伊拉克对美国说“关你鸟事”

    • 佐野大树
      佐野大树

      在中国想要政商分离不可能

    热点图片
    拼命载入中...