- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我整天都在尝试修复 段错误 这只发生在一台设备上。但从一开始...
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "pthread.h"
void* start_rtn(void* param);
int main(int argc, char **argv)
{
printf("Hallo World\n");
pthread_t tid;
int err = pthread_create(&tid, NULL, start_rtn, NULL);
pthread_join(tid, NULL);
printf("Exit\n");
}
void* start_rtn(void* param)
{
printf("Thread test\n");
}
以下是我的 CMakeList.txt 的相关部分:
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc)
file(GLOB SOURCES "main.c")
add_executable(test ${SOURCES})
target_link_libraries(test -pthread)
这个测试应用程序可以在我所有的 ARM 设备上运行,除了一个。一个 ARM 设备会立即产生段错误。当我运行 gdb 时,会出现以下输出:
warning: core file may not match specified executable file.
[New LWP 10825]
warning: File "/lib/libthread_db-1.0.so" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.
warning: File "/lib/libthread_db-1.0.so" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.
Core was generated by `./test'.
Program terminated with signal 11, Segmentation fault.
#0 0x00000000 in ?? ()
但是......如果我在我的 Raspberry Pi 上编译相同的应用程序,它甚至可以在特殊设备上运行。
pthread_create
的调用无论在哪个设备上编译它都可以工作。
libpthread.so.0 => /lib/libpthread.so.0 (0xb6f2e000)
libc.so.6 => /lib/libc.so.6 (0xb6e02000)
ld-linux-armhf.so.3 => /lib/ld-linux-armhf.so.3 (0xb6dda000)
/lib/ld-linux-armhf.so.3 (0xb6f4d000)
Version information:
./testapp:
libpthread.so.0 (GLIBC_2.4) => /lib/libpthread.so.0
ld-linux-armhf.so.3 (GLIBC_2.4) => /lib/ld-linux-armhf.so.3
libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
/lib/libpthread.so.0:
ld-linux.so.3 (GLIBC_2.4) => /lib/ld-linux-armhf.so.3
ld-linux.so.3 (GLIBC_PRIVATE) => /lib/ld-linux-armhf.so.3
libc.so.6 (GLIBC_PRIVATE) => /lib/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
/lib/libc.so.6:
ld-linux.so.3 (GLIBC_2.4) => /lib/ld-linux-armhf.so.3
ld-linux.so.3 (GLIBC_PRIVATE) => /lib/ld-linux-armhf.so.3
这是工作可执行文件的 ldd 输出(由树莓派编译)
libpthread.so.0 => /lib/libpthread.so.0 (0xb6ee1000)
libc.so.6 => /lib/libc.so.6 (0xb6db5000)
/lib/ld-linux-armhf.so.3 (0xb6f00000)
Version information:
./testapp_working:
libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
libpthread.so.0 (GLIBC_2.4) => /lib/libpthread.so.0
/lib/libpthread.so.0:
ld-linux.so.3 (GLIBC_2.4) => /lib/ld-linux-armhf.so.3
ld-linux.so.3 (GLIBC_PRIVATE) => /lib/ld-linux-armhf.so.3
libc.so.6 (GLIBC_PRIVATE) => /lib/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
/lib/libc.so.6:
ld-linux.so.3 (GLIBC_2.4) => /lib/ld-linux-armhf.so.3
ld-linux.so.3 (GLIBC_PRIVATE) => /lib/ld-linux-armhf.so.3
附:
This thread似乎非常平等。我已经确保我的环境和 Raspberry-Pi 的所有 gcc 参数都是相同的。
/usr/bin/arm-linux-gnueabihf-gcc -marm -march=armv6 -mfpu=vfp -mtp=soft -pthread -g2 -gdwarf-2 -DDEBUG -D LINUX -D _GNU_SOURCE -D _DEBUG -std=gnu11 -o CMakeFiles/testapp.dir/main.c.o -c main.c
/usr/bin/arm-linux-gnueabihf-gcc -marm -march=armv6 -mfpu=vfp -mtp=soft -pthread -g2 -gdwarf-2 -DDEBUG CMakeFiles/testapp.dir/main.c.o -o ARM/Debug/testapp -pthread
编辑 - Erlkoenig 要求的其他 gdb 输出:
Core was generated by `./testapp'.
Program terminated with signal 11, Segmentation fault.
#0 0x00000000 in ?? ()
(gdb) disas
No function contains program counter for selected frame.
(gdb) bt
#0 0x00000000 in ?? ()
#1 0xb6ecb5b0 in __pthread_initialize_minimal () from /lib/libpthread.so.0
#2 0xb6ec9ba0 in ?? () from /lib/libpthread.so.0
Cannot access memory at address 0x0
#3 0xb6ec9ba0 in ?? () from /lib/libpthread.so.0
Cannot access memory at address 0x0
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) info reg
r0 0xb6f08504 3069216004
r1 0xb6ee41e0 3069067744
r2 0x800fff 8392703
r3 0x0 0
r4 0xb6f08504 3069216004
r5 0xb6ee2000 3069059072
r6 0xb6d99050 3067711568
r7 0xaf 175
r8 0x0 0
r9 0xb6ee4198 3069067672
r10 0xb6ecb2e0 3068965600
r11 0x0 0
r12 0xb6e979e0 3068754400
sp 0xbe9bec30 0xbe9bec30
lr 0xb6ecb5b0 -1226000976
pc 0x0 0x0
cpsr 0x60000010 1610612752
(gdb) info thread
Id Target Id Frame
* 1 LWP 24127 0x00000000 in ?? ()
(gdb)
编辑 - Erlkoenig 请求的 exakt CPU 信息:
processor : 0
model name : ARMv7 Processor rev 0 (v7l)
BogoMIPS : 1594.16
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc09
CPU revision : 0
Hardware : Altera SOCFPGA
编辑 - Erlkoenig 请求的 objdump 输出:
test: file format elf32-littlearm
Disassembly of section .init:
000004f4 <_init>:
4f4: e92d4008 push {r3, lr}
4f8: eb000035 bl 5d4 <call_weak_fn>
4fc: e8bd8008 pop {r3, pc}
Disassembly of section .plt:
00000500 <.plt>:
500: e52de004 push {lr} ; (str lr, [sp, #-4]!)
504: e59fe004 ldr lr, [pc, #4] ; 510 <.plt+0x10>
508: e08fe00e add lr, pc, lr
50c: e5bef008 ldr pc, [lr, #8]!
510: 00010a9c .word 0x00010a9c
00000514 <__cxa_finalize@plt>:
514: e28fc600 add ip, pc, #0, 12
518: e28cca10 add ip, ip, #16, 20 ; 0x10000
51c: e5bcfa9c ldr pc, [ip, #2716]! ; 0xa9c
00000520 <printf@plt>:
520: e28fc600 add ip, pc, #0, 12
524: e28cca10 add ip, ip, #16, 20 ; 0x10000
528: e5bcfa94 ldr pc, [ip, #2708]! ; 0xa94
0000052c <pthread_self@plt>:
52c: e28fc600 add ip, pc, #0, 12
530: e28cca10 add ip, ip, #16, 20 ; 0x10000
534: e5bcfa8c ldr pc, [ip, #2700]! ; 0xa8c
00000538 <__stack_chk_fail@plt>:
538: e28fc600 add ip, pc, #0, 12
53c: e28cca10 add ip, ip, #16, 20 ; 0x10000
540: e5bcfa84 ldr pc, [ip, #2692]! ; 0xa84
00000544 <pthread_create@plt>:
544: e28fc600 add ip, pc, #0, 12
548: e28cca10 add ip, ip, #16, 20 ; 0x10000
54c: e5bcfa7c ldr pc, [ip, #2684]! ; 0xa7c
00000550 <puts@plt>:
550: e28fc600 add ip, pc, #0, 12
554: e28cca10 add ip, ip, #16, 20 ; 0x10000
558: e5bcfa74 ldr pc, [ip, #2676]! ; 0xa74
0000055c <__libc_start_main@plt>:
55c: e28fc600 add ip, pc, #0, 12
560: e28cca10 add ip, ip, #16, 20 ; 0x10000
564: e5bcfa6c ldr pc, [ip, #2668]! ; 0xa6c
00000568 <__gmon_start__@plt>:
568: e28fc600 add ip, pc, #0, 12
56c: e28cca10 add ip, ip, #16, 20 ; 0x10000
570: e5bcfa64 ldr pc, [ip, #2660]! ; 0xa64
00000574 <pthread_join@plt>:
574: e28fc600 add ip, pc, #0, 12
578: e28cca10 add ip, ip, #16, 20 ; 0x10000
57c: e5bcfa5c ldr pc, [ip, #2652]! ; 0xa5c
00000580 <abort@plt>:
580: e28fc600 add ip, pc, #0, 12
584: e28cca10 add ip, ip, #16, 20 ; 0x10000
588: e5bcfa54 ldr pc, [ip, #2644]! ; 0xa54
Disassembly of section .text:
0000058c <_start>:
58c: f04f 0b00 mov.w fp, #0
590: f04f 0e00 mov.w lr, #0
594: bc02 pop {r1}
596: 466a mov r2, sp
598: b404 push {r2}
59a: b401 push {r0}
59c: f8df a024 ldr.w sl, [pc, #36] ; 5c4 <_start+0x38>
5a0: a308 add r3, pc, #32 ; (adr r3, 5c4 <_start+0x38>)
5a2: 449a add sl, r3
5a4: f8df c020 ldr.w ip, [pc, #32] ; 5c8 <_start+0x3c>
5a8: f85a c00c ldr.w ip, [sl, ip]
5ac: f84d cd04 str.w ip, [sp, #-4]!
5b0: 4b06 ldr r3, [pc, #24] ; (5cc <_start+0x40>)
5b2: f85a 3003 ldr.w r3, [sl, r3]
5b6: 4806 ldr r0, [pc, #24] ; (5d0 <_start+0x44>)
5b8: f85a 0000 ldr.w r0, [sl, r0]
5bc: f7ff efce blx 55c <__libc_start_main@plt>
5c0: f7ff efde blx 580 <abort@plt>
5c4: 000109e8 .word 0x000109e8
5c8: 00000034 .word 0x00000034
5cc: 00000048 .word 0x00000048
5d0: 0000004c .word 0x0000004c
000005d4 <call_weak_fn>:
5d4: e59f3014 ldr r3, [pc, #20] ; 5f0 <call_weak_fn+0x1c>
5d8: e59f2014 ldr r2, [pc, #20] ; 5f4 <call_weak_fn+0x20>
5dc: e08f3003 add r3, pc, r3
5e0: e7932002 ldr r2, [r3, r2]
5e4: e3520000 cmp r2, #0
5e8: 012fff1e bxeq lr
5ec: eaffffdd b 568 <__gmon_start__@plt>
5f0: 000109c8 .word 0x000109c8
5f4: 00000044 .word 0x00000044
000005f8 <deregister_tm_clones>:
5f8: 4806 ldr r0, [pc, #24] ; (614 <deregister_tm_clones+0x1c>)
5fa: 4b07 ldr r3, [pc, #28] ; (618 <deregister_tm_clones+0x20>)
5fc: 4478 add r0, pc
5fe: 4a07 ldr r2, [pc, #28] ; (61c <deregister_tm_clones+0x24>)
600: 447b add r3, pc
602: 4283 cmp r3, r0
604: 447a add r2, pc
606: d003 beq.n 610 <deregister_tm_clones+0x18>
608: 4b05 ldr r3, [pc, #20] ; (620 <deregister_tm_clones+0x28>)
60a: 58d3 ldr r3, [r2, r3]
60c: b103 cbz r3, 610 <deregister_tm_clones+0x18>
60e: 4718 bx r3
610: 4770 bx lr
612: bf00 nop
614: 00010a08 .word 0x00010a08
618: 00010a04 .word 0x00010a04
61c: 000109a4 .word 0x000109a4
620: 0000003c .word 0x0000003c
00000624 <register_tm_clones>:
624: 4808 ldr r0, [pc, #32] ; (648 <register_tm_clones+0x24>)
626: 4909 ldr r1, [pc, #36] ; (64c <register_tm_clones+0x28>)
628: 4478 add r0, pc
62a: 4a09 ldr r2, [pc, #36] ; (650 <register_tm_clones+0x2c>)
62c: 4479 add r1, pc
62e: 1a09 subs r1, r1, r0
630: 447a add r2, pc
632: 0fcb lsrs r3, r1, #31
634: eb03 01a1 add.w r1, r3, r1, asr #2
638: 1049 asrs r1, r1, #1
63a: d003 beq.n 644 <register_tm_clones+0x20>
63c: 4b05 ldr r3, [pc, #20] ; (654 <register_tm_clones+0x30>)
63e: 58d3 ldr r3, [r2, r3]
640: b103 cbz r3, 644 <register_tm_clones+0x20>
642: 4718 bx r3
644: 4770 bx lr
646: bf00 nop
648: 000109dc .word 0x000109dc
64c: 000109d8 .word 0x000109d8
650: 00010978 .word 0x00010978
654: 00000050 .word 0x00000050
00000658 <__do_global_dtors_aux>:
658: b508 push {r3, lr}
65a: 4b0a ldr r3, [pc, #40] ; (684 <__do_global_dtors_aux+0x2c>)
65c: 4a0a ldr r2, [pc, #40] ; (688 <__do_global_dtors_aux+0x30>)
65e: 447b add r3, pc
660: 447a add r2, pc
662: 781b ldrb r3, [r3, #0]
664: b96b cbnz r3, 682 <__do_global_dtors_aux+0x2a>
666: 4b09 ldr r3, [pc, #36] ; (68c <__do_global_dtors_aux+0x34>)
668: 58d3 ldr r3, [r2, r3]
66a: b123 cbz r3, 676 <__do_global_dtors_aux+0x1e>
66c: 4b08 ldr r3, [pc, #32] ; (690 <__do_global_dtors_aux+0x38>)
66e: 447b add r3, pc
670: 6818 ldr r0, [r3, #0]
672: f7ff ef50 blx 514 <__cxa_finalize@plt>
676: f7ff ffbf bl 5f8 <deregister_tm_clones>
67a: 4b06 ldr r3, [pc, #24] ; (694 <__do_global_dtors_aux+0x3c>)
67c: 2201 movs r2, #1
67e: 447b add r3, pc
680: 701a strb r2, [r3, #0]
682: bd08 pop {r3, pc}
684: 000109a6 .word 0x000109a6
688: 00010948 .word 0x00010948
68c: 00000038 .word 0x00000038
690: 00010992 .word 0x00010992
694: 00010986 .word 0x00010986
00000698 <frame_dummy>:
698: e7c4 b.n 624 <register_tm_clones>
69a: bf00 nop
0000069c <main>:
69c: e92d4800 push {fp, lr}
6a0: e28db004 add fp, sp, #4
6a4: e24dd018 sub sp, sp, #24
6a8: e50b0018 str r0, [fp, #-24] ; 0xffffffe8
6ac: e50b101c str r1, [fp, #-28] ; 0xffffffe4
6b0: e59f20b0 ldr r2, [pc, #176] ; 768 <main+0xcc>
6b4: e08f2002 add r2, pc, r2
6b8: e59f30ac ldr r3, [pc, #172] ; 76c <main+0xd0>
6bc: e7923003 ldr r3, [r2, r3]
6c0: e5933000 ldr r3, [r3]
6c4: e50b3008 str r3, [fp, #-8]
6c8: e3a03000 mov r3, #0
6cc: e59f309c ldr r3, [pc, #156] ; 770 <main+0xd4>
6d0: e08f3003 add r3, pc, r3
6d4: e1a00003 mov r0, r3
6d8: ebffff9c bl 550 <puts@plt>
6dc: ebffff92 bl 52c <pthread_self@plt>
6e0: e50b0010 str r0, [fp, #-16]
6e4: e51b1010 ldr r1, [fp, #-16]
6e8: e59f3084 ldr r3, [pc, #132] ; 774 <main+0xd8>
6ec: e08f3003 add r3, pc, r3
6f0: e1a00003 mov r0, r3
6f4: ebffff89 bl 520 <printf@plt>
6f8: e24b0014 sub r0, fp, #20
6fc: e3a03000 mov r3, #0
700: e59f2070 ldr r2, [pc, #112] ; 778 <main+0xdc>
704: e08f2002 add r2, pc, r2
708: e3a01000 mov r1, #0
70c: ebffff8c bl 544 <pthread_create@plt>
710: e50b000c str r0, [fp, #-12]
714: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec
718: e3a01000 mov r1, #0
71c: e1a00003 mov r0, r3
720: ebffff93 bl 574 <pthread_join@plt>
724: e59f3050 ldr r3, [pc, #80] ; 77c <main+0xe0>
728: e08f3003 add r3, pc, r3
72c: e1a00003 mov r0, r3
730: ebffff86 bl 550 <puts@plt>
734: e3a03000 mov r3, #0
738: e59f1040 ldr r1, [pc, #64] ; 780 <main+0xe4>
73c: e08f1001 add r1, pc, r1
740: e59f2024 ldr r2, [pc, #36] ; 76c <main+0xd0>
744: e7912002 ldr r2, [r1, r2]
748: e5921000 ldr r1, [r2]
74c: e51b2008 ldr r2, [fp, #-8]
750: e0321001 eors r1, r2, r1
754: 0a000000 beq 75c <main+0xc0>
758: ebffff76 bl 538 <__stack_chk_fail@plt>
75c: e1a00003 mov r0, r3
760: e24bd004 sub sp, fp, #4
764: e8bd8800 pop {fp, pc}
768: 000108f0 .word 0x000108f0
76c: 00000040 .word 0x00000040
770: 00000130 .word 0x00000130
774: 0000011c .word 0x0000011c
778: 00000078 .word 0x00000078
77c: 000000e8 .word 0x000000e8
780: 00010868 .word 0x00010868
00000784 <start_rtn>:
784: e92d4800 push {fp, lr}
788: e28db004 add fp, sp, #4
78c: e24dd008 sub sp, sp, #8
790: e50b0008 str r0, [fp, #-8]
794: e59f3018 ldr r3, [pc, #24] ; 7b4 <start_rtn+0x30>
798: e08f3003 add r3, pc, r3
79c: e1a00003 mov r0, r3
7a0: ebffff6a bl 550 <puts@plt>
7a4: e1a00000 nop ; (mov r0, r0)
7a8: e1a00003 mov r0, r3
7ac: e24bd004 sub sp, fp, #4
7b0: e8bd8800 pop {fp, pc}
7b4: 00000080 .word 0x00000080
000007b8 <__libc_csu_init>:
7b8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
7bc: 4607 mov r7, r0
7be: 4e0c ldr r6, [pc, #48] ; (7f0 <__libc_csu_init+0x38>)
7c0: 4688 mov r8, r1
7c2: 4d0c ldr r5, [pc, #48] ; (7f4 <__libc_csu_init+0x3c>)
7c4: 4691 mov r9, r2
7c6: 447e add r6, pc
7c8: f7ff ee94 blx 4f4 <_init>
7cc: 447d add r5, pc
7ce: 1b76 subs r6, r6, r5
7d0: 10b6 asrs r6, r6, #2
7d2: d00a beq.n 7ea <__libc_csu_init+0x32>
7d4: 3d04 subs r5, #4
7d6: 2400 movs r4, #0
7d8: f855 3f04 ldr.w r3, [r5, #4]!
7dc: 3401 adds r4, #1
7de: 464a mov r2, r9
7e0: 4641 mov r1, r8
7e2: 4638 mov r0, r7
7e4: 4798 blx r3
7e6: 42a6 cmp r6, r4
7e8: d1f6 bne.n 7d8 <__libc_csu_init+0x20>
7ea: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
7ee: bf00 nop
7f0: 000106d6 .word 0x000106d6
7f4: 000106cc .word 0x000106cc
000007f8 <__libc_csu_fini>:
7f8: 4770 bx lr
7fa: bf00 nop
Disassembly of section .fini:
000007fc <_fini>:
7fc: e92d4008 push {r3, lr}
800: e8bd8008 pop {r3, pc}
编辑 -
Here你可以下载这两个可执行文件
最佳答案
现在我在这个问题上花了两天时间,似乎已经找到了解决方案。
在 RaspberryPi(应用程序成功启动)上,始终存在“检测到堆栈粉碎”的 SIGABRT(信号 6)。但这些都是无法解释的。所以我决定(暂时)通过 -fno-stack-protector
禁用它们。 .
结果:应用程序也在特殊设备上启动,还没有崩溃。
交叉编译器“gcc-arm-linux-gnueabihf”与堆栈粉碎相结合是否可能存在错误?使用 gcc 7.5.0 版和 9.3.0 版可以重现该问题。
老实说,这个故事让我对我的build设置非常怀疑。
这是新的 ldd 输出:
ldd ./testapp
libpthread.so.0 => /lib/libpthread.so.0 (0xb6f6f000)
libc.so.6 => /lib/libc.so.6 (0xb6e43000)
/lib/ld-linux-armhf.so.3 (0xb6f8e000)
非常感谢所有的支持者
关于c - 使用 pthread 和 arm-linux-gnueabihf-gcc 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63705707/
将 ARM 处理器模式与 x86 操作模式(ring0 到 ring 3)进行比较,用户模式看起来就像 ring3,用户空间程序在其中运行。 但是,我无法将 ring0 与系统模式或主管模式联系起来。
为什么我们在 ARM 架构中有暂存寄存器?处理器如何使用它,我的意思是这个寄存器的用途是什么? 最佳答案 来自 Procedure Call Standard for the Arm Architec
我了解弱内存模型和强内存模型的基本区别。但是没有确切的弱定义,它取决于体系结构(这里是 ARM)。 我已经阅读了有关 ARM 信息中心的文档,但仍有很多内容不清楚。有人可以列出 - ARM 保证哪些内
我想在 arm 9 上分析我的代码,是否有任何分析器可以给我函数调用时间和每个函数占用的总周期?我更喜欢任何免费的分析器。我喜欢在 Linux 中使用 kcachegrind。 最佳答案 我不知道有什
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
众所周知,对于X86架构:按下电源按钮后,机器开始执行0xFFFFFFF0处的代码,然后开始执行BIOS中的代码以进行硬件初始化。 BIOS 执行后,它使用引导加载程序将操作系统镜像加载到内存中。最后
我有 rootfs 和 klibc 文件系统。我正在创建 make 规则,而一些开发人员的编译器较旧,但没有联网。note1 我正在尝试验证所有文件都是使用 arm 仅当检测到某个版本的编译器时。我已
在部署实际应用程序之前,我们使用 ARM 模板部署 Azure 资源,作为构建过程的一部分。 到目前为止,我们所有的应用程序资源都自包含在资源组中。例如需要 SQL Server 和存储帐户的 Web
为什么 ARM Controller 在发生异常时要从 THUMB 状态返回到 ARM 状态? 最佳答案 一种解释可能是 ARM 模式是 CPU 的“ native ”操作模式,与有限的 Thumb
我正在尝试反转 128 位向量 (uint16x8) 的顺序。 例如,如果我有 a b c d e f g h 我想获得 h g f e d c b a 有没有一种简单的方法可以使用 NEON 内在函
有很多关于内存屏障的信息。大多数信息是指多核或多处理器架构。 Stackoverflow 上的某个地方还指出,单核处理器不需要内存屏障。 到目前为止,我找不到任何明确的解释,为什么单核 CPU 上不需
我想在 ARM Cortex A8 处理器上移植一小段代码。 L1 缓存和 L2 缓存都非常有限。我的程序中有 3 个数组。其中两个是顺序访问的(大小> 数组 A:6MB 和数组 B:3MB),第三个
我无法弄清楚这个 ARM 指令是做什么的: strd.w r0, r1, [r2] 我知道这是一个存储指令,它在 *r2 中存储了一些东西。但我不完全确定是什么。为什么有两个源寄存器
我很好奇为什么有些 ARM 指令(如 MUL 和 ADD)不使用桶形移位器。我想知道极限背后的理性。谢谢! 最佳答案 并不是没有使用桶形移位器;这是您无法指定它在非常具体的指令(数据处理和加载/存储)
我需要计算与 SSE 相同的操作: __m128i result1=_mm_avg_epu8 (upper, lower); 使用 NEON,我执行以下操作: uint8x16_t result1=v
我正在尝试使用 PLD 指令。我面临的问题如下: int32_t addr[10]; asm ("PLD [addr,#5]"); 我收到以下错误: Error: ARM register expec
根据 ARM 手册,应该可以访问特定 CPU 模式的存储寄存器,例如“r13_svc”。当我尝试执行此操作时,gcc 对我大喊大叫,并显示以下错误: 立即表达式需要 # 前缀 -- `mov r2,s
我正在使用 mbxxx 目标开发 Contiki 2.7。在构建我的代码时,链接器提示 .ARM.exidx 和 .data 部分的重叠 .在修改了链接器脚本 contiki-2.7/cpu/stm3
如何确定给定 ARM 处理器上是否存在 NEON 引擎?可以为此目的查询任何状态/标志寄存器吗? 最佳答案 我相信unixsmurf's answer如果使用具有特权内核的操作系统,这将与您获得的一样
如何在设备上分析我的 ARM 代码。 这是涉及 USB 和 SDH 处理的裸机代码,我看到了这个 Code Profiler for ARM但似乎很 slim ,我很熟悉DS5但如果您使用基于 lin
我是一名优秀的程序员,十分优秀!