Tag: arm7

如何在ARM7中进行primefaces比较和交换?

我想修改一个全局变量,它由RTOS中的不同任务和IRQ上下文共享。 因此我需要primefaces地修改这个变量。 在我当前的实现中,我一直在使用enable_irq / disable_irq函数来自动修改语句。 extern int g_var; void set_bit_atomic(int mask) { disable_irq(); g_var |= mask; enable_irq(); } 我在GCC 文档中找到了__sync_bool_compare_and_swap函数作为primefaces操作的帮助器。 我目前的工具链是KEIL MDK,我想切换到下面显示的方法, void set_bit_atomic(int mask) { volatile int tmp; do { tmp = g_var; } while (!__sync_bool_compare_and_swap(&g_var, tmp, tmp | mask)); } 如何在ARMv4命令集中编写__sync_bool_compare_and_swap函数(作为内联汇编)?

高效的浮点比较(Cortex-A8)

有一个大的(~100 000) 浮点变量数组,并且有一个阈值(也是浮点 )。 问题是我必须将数组中的每个变量与阈值进行比较,但NEON标记传输需要很长时间(根据分析器约20个周期)。 有没有有效的方法来比较这些值? 注意:由于舍入误差无关紧要,我尝试了以下方法: float arr[10000]; float threshold; …. int a = arr[20]; // eg int t = threshold; if (t > a) {….} 但在这种情况下,我得到以下处理器命令序列: vldr.32 s0, [r0] vcvt.s32.f32 s0, s0 vmov r0, s0 <— takes 20 cycles as `vmrs APSR_nzcv, fpscr` in case of cmp r0, r1 floating point comparison 当转换发生在NEON时,无论是通过描述的方式还是浮点数来比较整数。