天嵌 ARM开发社区

 找回密码
 注册
查看: 1645|回复: 0

linux2.6内核中cpu_init堆栈初始化疑惑

[复制链接]
wukui1008 发表于 2011-12-27 22:31:59 | 显示全部楼层 |阅读模式
struct stack {
        u32 irq[3];
        u32 abt[3];
        u32 und[3];
} ____cacheline_aligned;
static struct stack stacks[NR_CPUS];
.........
unsigned int cpu = smp_processor_id();
struct stack *stk = &stacks[cpu];
        __asm__ (
        "msr        cpsr_c, %1\n\t"
        "add        sp, %0, %2\n\t"
        "msr        cpsr_c, %3\n\t"
        "add        sp, %0, %4\n\t"
        "msr        cpsr_c, %5\n\t"
        "add        sp, %0, %6\n\t"
        "msr        cpsr_c, %7"
            :
            : "r" (stk),
              "I" (PSR_F_BIT | PSR_I_BIT | IRQ_MODE),
              "I" (offsetof(struct stack, irq[0])),
              "I" (PSR_F_BIT | PSR_I_BIT | ABT_MODE),
              "I" (offsetof(struct stack, abt[0])),
              "I" (PSR_F_BIT | PSR_I_BIT | UND_MODE),
              "I" (offsetof(struct stack, und[0])),
              "I" (PSR_F_BIT | PSR_I_BIT | SVC_MODE)
            : "r14");

        u32 irq[3];
        u32 abt[3];
        u32 und[3];

这里好像是把&stacks->irq[0]\&stacks->abt[0]\&stacks->und[0]\赋给了sp。。
还是我没有看懂代码???
"r" (stk),它不就是stacks结构体的起始地址吗?
有人说      这个是堆栈的起始地址。。。这样一来那堆栈才12个bytes  。也不够用啊。。
没想明白!
求解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 07:28 , Processed in 1.029337 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表