2017-05-13

本博文仅提出问题, 不给出答案. 祝玩得开心.

问题: 我们知道 当前task可以通过current来获得. ARM上, 其实现如下:

#define current (get_current()) 
#define get_current() (current_thread_info()->task)
static inline struct thread_info *current_thread_info(void)
{
    register unsigned long sp asm ("sp");
    return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
}

对于ARM, 其sp是banked的, irq模式和SVC模式的sp不是同一个. 这样, 中断handler还能通过sp来获得当前task吗?

以下内容是本问题的提示.
为了避免干扰各位思考, 已设置背景色为黑色, 若要查看文字, 可通过按ctrl+a等方法查看.

中断handler在SVC模式下执行的.

本文地址: https://awakening-fong.github.io/posts/arm/current_in_interrupt_handler

转载请注明出处: https://awakening-fong.github.io


若无法评论, 请打开JavaScript, 并通过proxy.


blog comments powered by Disqus