คำถามติดแท็ก arm

แท็กนี้ใช้สำหรับคำถามที่เกี่ยวข้องกับคอมพิวเตอร์ตระกูล ARM (Advanced RISC Machine) นั่นคือเครื่องจักรหรืออุปกรณ์อิเล็กทรอนิกส์ที่ทำงานบนแกนประมวลผล ARM หรือระบบโดยใช้แกน ARM

1
จะมีผลต่อการสร้างรหัส Delphi XEx สำหรับเป้าหมาย Android / ARM อย่างไร
อัพเดท 2017-05-17 ฉันไม่ทำงานให้กับ บริษัท ที่มีคำถามนี้มาแล้วและไม่สามารถเข้าถึง Delphi XEx ได้ ในขณะที่ฉันอยู่ที่นั่นปัญหาได้รับการแก้ไขโดยการโยกย้ายไปยัง FPC + GCC (Pascal + C) ผสมกับ NEON อินทรินซินส์สำหรับกิจวัตรบางอย่างที่สร้างความแตกต่าง (แนะนำให้ใช้ FPC + GCC เพราะช่วยให้สามารถใช้เครื่องมือมาตรฐานโดยเฉพาะอย่างยิ่ง Valgrind) หากมีใครสามารถสาธิตด้วยตัวอย่างที่น่าเชื่อถือว่าจริง ๆ แล้วพวกเขาสามารถสร้างรหัส ARM ที่ดีที่สุดจาก Delphi XEx ได้อย่างไรฉันยินดีที่จะตอบ . คอมไพเลอร์ Delphi ของ Embarcadero ใช้แบ็กเอนด์ LLVM เพื่อสร้างรหัส ARM ดั้งเดิมสำหรับอุปกรณ์ Android ฉันมีรหัส Pascal จำนวนมากที่ฉันต้องรวบรวมในแอปพลิเคชัน Android และฉันต้องการทราบวิธีการทำให้ Delphi สร้างรหัสที่มีประสิทธิภาพมากขึ้น …

5
สถาปัตยกรรม ARM แตกต่างจาก x86 อย่างไร [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ สถาปัตยกรรม x86 ได้รับการออกแบบมาเป็นพิเศษเพื่อทำงานกับแป้นพิมพ์ในขณะที่ ARM คาดว่าจะเป็นมือถือ ความแตกต่างที่สำคัญระหว่างสองคืออะไร
192 x86  arm 

1
เหตุใดชิป ARM จึงมีคำสั่งกับ Javascript ในชื่อ (FJCVTZS)
FJCVTZSคือ "Floating-point Javascript Convert to Signed fixed-point, rounding towards Zero" รองรับชิป Arm v8.3-A และใหม่กว่า ซึ่งเป็นเรื่องแปลกเพราะคุณไม่คาดคิดว่าจะได้เห็น JavaScript ใกล้เคียงกับ bare metal ฉันสามารถหาคำอธิบายได้ว่าคำสั่งนั้นทำอะไรได้บ้าง แต่ทำไมจึงไม่มี เธรดนี้ระบุว่า "มีอยู่เป็นคำสั่งเดียวเนื่องจาก JS ไม่มีประเภทจำนวนเต็มหมายความว่ากรณีการใช้งานบางอย่างจำเป็นต้องใช้การดำเนินการนี้ในเชิงลามกอนาจารโดยไม่มีเหตุผลอัลกอริทึมที่ดี" เป็นไปได้ แต่ฉันต้องการความเข้าใจในรายละเอียดเพิ่มเติม
148 javascript  assembly  arm 

3
ทำไมต้องใช้รหัส armeabi-v7a มากกว่ารหัส armeabi?
ในโครงการปัจจุบันของฉันฉันใช้ประโยชน์จากไฟล์. so หลายไฟล์ เหล่านี้ตั้งอยู่ที่โฟลเดอร์ armeabi และ armeabi-v7a น่าเสียดายที่ไฟล์. so หนึ่งไฟล์เป็น 6MB และฉันต้องการลดขนาดไฟล์ แทนที่จะมีไฟล์ APK ที่มีไขมันฉันต้องการใช้ไฟล์ armeabi และลบโฟลเดอร์ armeabi-v7a ตามเอกสาร NDK รหัส armeabi-v7a ได้รับการขยายรหัส armeabi ซึ่งสามารถมีคำสั่ง CPU เพิ่มเติม ทั้งหมดนี้นอกเหนือไปจากความเชี่ยวชาญของฉัน แต่ฉันถามว่าทำไมจึงมีรหัส armeabi-v7a และ armeabi ต้องมีเหตุผลที่ดีที่จะมีทั้งคู่ใช่มั้ย ในอุปกรณ์ทดสอบของฉันทั้งหมดนี้ดูเหมือนจะทำงานได้ดี สิ่งเหล่านี้มีซีพียู ARM v7 ปลอดภัยไหมที่จะคิดว่าทุกอย่างใช้งานได้ในตอนนี้?


15
ค้นหาได้อย่างรวดเร็วว่ามีค่าอยู่ในอาร์เรย์ C หรือไม่
ฉันมีแอปพลิเคชั่นฝังตัวที่มี ISR ที่สำคัญตามเวลาซึ่งจำเป็นต้องวนซ้ำผ่านอาร์เรย์ขนาด 256 (ควรเป็น 1024 แต่ 256 เป็นค่าต่ำสุด) และตรวจสอบว่าค่าตรงกับเนื้อหาอาร์เรย์หรือไม่ A boolจะถูกตั้งค่าเป็นจริงในกรณีนี้ ไมโครคอนโทรลเลอร์คือ NXP LPC4357 แกน ARM Cortex M4 และคอมไพเลอร์คือ GCC ฉันได้รวมการเพิ่มประสิทธิภาพระดับ 2 ไว้แล้ว (3 ช้ากว่า) และวางฟังก์ชันใน RAM แทนแฟลช ฉันยังใช้เลขคณิตตัวชี้และการforวนซ้ำซึ่งทำการนับลงแทนการขึ้น (ตรวจสอบว่าi!=0เร็วกว่าการตรวจสอบว่าi<256) สรุปแล้วฉันจบลงด้วยระยะเวลา 12.5 ซึ่งจะต้องลดลงอย่างมากเพื่อให้เป็นไปได้ นี่คือรหัส (หลอก) ที่ฉันใช้ตอนนี้: uint32_t i; uint32_t *array_ptr = &theArray[0]; uint32_t compareVal = 0x1234ABCD; bool validFlag = …

8
จะติดตั้งคอมไพเลอร์ข้าม Raspberry Pi บนเครื่องโฮสต์ Linux ของฉันได้อย่างไร
ฉันกำลังพยายามรวบรวมข้ามสำหรับ Raspberry Pi ที่ทำงานบนเครื่อง Ubuntu ของฉัน ในระหว่างความพยายามครั้งแรกของฉันฉันใช้คอมไพเลอร์ arm-linux-gnueabi ซึ่งมีอยู่ใน repo ของ Ubuntu ฉันได้ผล ฉันสามารถสร้างการอ้างอิงทั้งหมดและใช้ cross-compiler ในโครงการ cmake ของฉัน อย่างไรก็ตามฉันเชื่อว่าฉันควรใช้เวอร์ชัน hf ดังนั้นฉันจึงเปลี่ยนไปใช้ arm-linux-gnueabihf จากนั้นฉันก็รู้ว่าสิ่งนี้ใช้ไม่ได้กับ Raspberry Pi เนื่องจากเป็น armv6 หลังจากที่บาง Googling ผมแล้วพบtoolchain ที่สร้างไว้ล่วงหน้าจาก GitHub ฉันดาวน์โหลด toolchain แต่ฉันไม่เข้าใจวิธี "ติดตั้ง" จริงๆ ฉันแตกไฟล์ไปยังโฮมไดเร็กทอรีของฉัน โครงสร้างไดเร็กทอรีมีลักษณะดังนี้: /gcc-linearo-arm-linux-gnueabihf-raspbian /arm-linux-gnueabihf /bin (contains g++, gcc, etc) /lib (contains libstdc++ library) …

4
ไฟล์ ELF และไฟล์ bin ต่างกันอย่างไร
ภาพสุดท้ายที่สร้างโดยผู้รวบรวมมีทั้งไฟล์ bin และไฟล์ ELF รูปแบบตัวโหลดแบบขยายความแตกต่างระหว่างสองไฟล์นี้คืออะไรโดยเฉพาะยูทิลิตี้ของไฟล์ ELF
100 arm  elf 

5
ตัวเลขจุดลอยตัวแบบแข็งและแบบอ่อนต่างกันอย่างไร
เมื่อฉันคอมไพล์โค้ด C ด้วย cross toolchain ตัวเชื่อมโยงจะพิมพ์หน้าคำเตือนโดยบอกว่าไฟล์ปฏิบัติการของฉันใช้ฮาร์ดโฟล แต่ libc ของฉันใช้ซอฟต์โฟล อะไรคือความแตกต่าง?
99 c  linux  floating-point  arm  libc 

1
สำเนาของรหัสเครื่องที่แน่นอนทำงานช้ากว่าฟังก์ชั่นเดิม 50%
ฉันทำการทดลองเล็กน้อยกับการใช้งานจาก RAM และหน่วยความจำแฟลชในระบบฝังตัว สำหรับการสร้างต้นแบบอย่างรวดเร็วและการทดสอบฉันกำลังใช้ Arduino Due (SAM3X8E ARM Cortex-M3) เท่าที่ฉันเห็น Arduino runtime และ bootloader ไม่ควรสร้างความแตกต่างที่นี่ นี่คือปัญหา: ฉันมีฟังก์ชั่น ( Calc ) ซึ่งเขียนใน ARM Thumb Assembly calcคำนวณตัวเลขและส่งคืน (> 1s รันไทม์สำหรับอินพุตที่กำหนด) ตอนนี้ฉันแยกรหัสเครื่องประกอบของฟังก์ชั่นนั้นด้วยตนเองและวางเป็นไบต์ดิบลงในฟังก์ชั่นอื่น ฟังก์ชั่นทั้งสองได้รับการยืนยันว่าอยู่ในหน่วยความจำแฟลช (ที่อยู่ 0x80149 และ 0x8017D ติดกัน) สิ่งนี้ได้รับการยืนยันผ่านการถอดแยกชิ้นส่วนและการตรวจสอบรันไทม์ void setup() { Serial.begin(115200); timeFnc(calc); timeFnc(calc2); } void timeFnc(int (*functionPtr)(void)) { unsigned long time1 …

2
อะไรทำให้เกิดความแปรปรวนสูงในรอบนี้สำหรับการวนรอบแบบเรียบง่ายด้วย -O0 แต่ไม่ใช่ -O3 บน Cortex-A72
ฉันใช้การทดลองบางอย่างเพื่อรับรูทีนที่สม่ำเสมออย่างมากสำหรับโค้ดบางส่วน รหัสที่ฉันกำลังจับเวลาเป็นภาระงานที่ค่อนข้าง จำกัด ของ CPU: int cpu_workload_external_O3(){ int x = 0; for(int ind = 0; ind < 12349560; ind++){ x = ((x ^ 0x123) + x * 3) % 123456; } return x; } ฉันได้เขียนโมดูลเคอร์เนลที่ปิดใช้งานการขัดจังหวะจากนั้นเรียกใช้การทดลอง 10 ครั้งของฟังก์ชั่นด้านบนกำหนดเวลาการทดลองแต่ละครั้งโดยรับความแตกต่างในตัวนับรอบนาฬิกาจากก่อนและหลัง สิ่งอื่น ๆ ที่ควรทราบ: เครื่องคือ ARM Cortex-A72 โดยมี 4 ซ็อกเก็ตที่มี 4 คอร์แต่ละอัน (แต่ละอันมีแคช L1 …

1
การใช้ C ++ AtomicInt นี้ถูกต้องหรือไม่
สถานที่ตั้ง: ผมทำงานกับ ARM ฝังตัว (เกือบเปลือยโลหะ) สภาพแวดล้อมที่ฉันไม่ได้มี C ++ 11 (กับstd::atomic<int>) ใช้ได้ดังนั้นโปรดหลีกเลี่ยงคำตอบเช่น " เพียงแค่ใช้มาตรฐาน C ++std::atomic<int> " ฉันไม่สามารถ การใช้งาน AtomicInt ARM นี้ถูกต้องหรือไม่ (ถือว่าสถาปัตยกรรม ARM คือARMv7-A ) คุณเห็นปัญหาการซิงโครไนซ์บ้างไหม? มันvolatileจำเป็น / มีประโยชน์หรือไม่? // File: atomic_int.h #ifndef ATOMIC_INT_H_ #define ATOMIC_INT_H_ #include <stdint.h> class AtomicInt { public: AtomicInt(int32_t init = 0) : atom(init) { } …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.