如何在ARM Cortex A9上实现关键部分
我正在将一些旧代码从ARM926内核移植到CortexA9。此代码是裸机代码,不包含操作系统或标准库(全部自定义)。我遇到了与竞态条件有关的故障,应该通过对代码进行严格的分段来避免这种情况。 我想对我的方法提供一些反馈,以了解我的关键部分是否可能未正确为此CPU实施。我正在使用GCC。我怀疑有一些细微的错误。 另外,是否有一个开源库具有针对ARM的这些类型的原语(甚至是一个很好的轻量级的spinlock / semephore库)? #define ARM_INT_KEY_TYPE unsigned int #define ARM_INT_LOCK(key_) \ asm volatile(\ "mrs %[key], cpsr\n\t"\ "orr r1, %[key], #0xC0\n\t"\ "msr cpsr_c, r1\n\t" : [key]"=r"(key_) :: "r1", "cc" ); #define ARM_INT_UNLOCK(key_) asm volatile ("MSR cpsr_c,%0" : : "r" (key_)) 该代码的用法如下: /* lock interrupts */ ARM_INT_KEY_TYPE key; ARM_INT_LOCK(key); <access registers, …