Jak to się robi? Jakie kroki muszę podjąć i jakie pułapki i pułapki należy rozważyć?Jak wykonać wbudowany montaż w telefonie iPhone?
Odpowiedz
stałam się to do pracy, dzięki jakiejś wewnętrznej pomocy nad na Apple Devforums, należy zarejestrować się, jeśli jesteś dedykowany programista iPhone.
Pierwszą rzeczą pierwszy, to __asm __(), nie zwykły asm().
Po drugie, domyślnie XCode generuje cel kompilacji, który kompiluje zestaw inline względem zestawu instrukcji ARM Thumb, dzięki czemu usat nie został rozpoznany jako właściwa instrukcja. Aby to naprawić, wykonaj polecenie "Pobierz informacje" na celu. Przewiń w dół do sekcji "GCC 4.0 - Generowanie kodu" i odznacz "Kompiluj dla kciuka". Wtedy ten Poniższy urywek skompiluje dobrze jeśli ustawić Active SDK do „Device”
inline int asm_saturate_to_255 (int a) {
int y;
__asm__("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a));
return y;
}
Oczywiście, teraz nie działa z iPhone Simulator. Ale TargetConditionals.h zdefiniował, że możesz #ifdef przeciwko. Mianowicie TARGET_OS_IPHONE i TARGET_IPHONE_SIMULATOR.
Myślę, że masz na myśli __asm __() zamiast zwykłego asm(). –
Dlaczego to nie działa z symulatorem iPhone'a? Czy na symulatorze nie działa żaden zestaw montażowy, czy też musisz mieć inny zestaw instrukcji montażu, ponieważ działa on na i386? – Roberto
@Roberto: Masz to. Symulator działa na x86, więc nie można uruchomić zespołu ARM. Po prostu się nie skompiluje. –
Piszę sporo kodu montażowego ARM Cortex-A8. CPU na iPhonie to ARM11 (afaik), więc podstawowy zestaw instrukcji jest taki sam.
Czego dokładnie szukasz? Mogę podać ci kilka przykładów, jeśli chcesz.
EDIT:
Właśnie się dowiedziałem, że na iPhone trzeba użyć kompilatora LLVM z-gcc. O ile mi wiadomo, powinien on rozumieć składnię wbudowanego assemblera z GCC. Jeśli tak, wszystkie samouczki wbudowanego modułu ARM ARM będą działać również na telefonie iPhone.
Oto bardzo minimalna wbudowana funkcja asemblera (w C). Czy możesz mi powiedzieć, czy kompiluje i działa na iPhone'ie? Jeśli to działa, mogę trochę przetłumaczyć, jak robić użyteczne rzeczy w wbudowanym asemblerze ARM, szczególnie w architekturze ARMv6 i rozszerzeniach DSP.
inline int saturate_to_255 (int a)
{
int y;
asm ("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a));
return y;
}
powinna być równa:
inline int saturate_to_255 (int a)
{
if (a < 0) a =0;
if (a > 255) a = 255;
return a;
}
Nie udało mi się skompilować tego. Próbowałem przez XCode Apple. Kompilator jest domyślnie ustawiony na GCC 4. Jeśli skompiluję go za pomocą tego, to narzeka na niepoprawną instrukcję "usat" i jeśli ustawię ją przy użyciu llvm-gcc, to narzeka na niepoprawną architekturę "armv6". –
spróbuj gcc -O3 -march = test armv6.c –
nie jest llvm-gcc faktycznie kompilator, który celuje w maszynę wirtualną llvm? – artificialidiot
Kciuk jest zalecany do aplikacji, które nie wymagają ciężkiej operacji pływania. Thumb zmniejsza rozmiar kodu i powoduje również szybsze wykonywanie kodu.
Należy więc włączyć tylko kciuk dla aplikacji takich jak gry 3D ...
Właściwie, z reguły używanie zestawu instrukcji Thumb jest znacznie wolniejsze niż przy użyciu zestawu instrukcji ARM. Zgodnie z regułą (gra słów nie jest przeznaczona), zyskujesz 1/3 rozmiaru kodu i tracisz 1/3 prędkości. Zobacz np. http://www.arm.com/pdfs/Thumb-2CoreTechnologyWhitepaper-Final4.pdf –
Rejestry mogą być również stosowane wprost w inline asm
void foo(void) {
#if TARGET_CPU_ARM64
__asm ("sub sp, sp, #0x60");
__asm ("str x29, [sp, #0x50]");
#endif
}
- 1. Jak wykonać geokodowanie (NIE odwrotne geokodowanie) na telefonie iPhone?
- 2. Jak zatrzymać UIView CABasicAnimation w telefonie iPhone
- 3. Jak zaimplementować wykres słupkowy w telefonie iPhone?
- 4. Jak przeanalizować wartość Json w telefonie iPhone?
- 5. Rozpoznawanie mowy na telefonie iPhone
- 6. Wyskakujące powiadomienie o telefonie iPhone
- 7. Jak wykonywać operacje podczas odtwarzania dźwięku w telefonie iPhone?
- 8. Java IDE * na * telefonie iPhone?
- 9. Testowanie poza warunkami kosmicznymi w telefonie iPhone
- 10. Używanie uwierzytelniania HTTP Digest w telefonie iPhone
- 11. Suma pamięci RAM w telefonie iPhone
- 12. UINavigation bar background w telefonie iPhone
- 13. Animacja przejścia między stronami w telefonie iPhone
- 14. Nazwa czcionki niesystemowej w telefonie iPhone
- 15. jak uruchomić aplikację w tle w telefonie iPhone?
- 16. Jak przekonwertować NSData na tablicę bajtów w telefonie iPhone?
- 17. Jak cofnąć i ponowić płynną linię w telefonie iPhone?
- 18. Czy jest jakaś czcionka wyglądająca jak LED w telefonie iPhone?
- 19. Jak sprawdzić niestandardowy schemat adresu URL w telefonie iPhone?
- 20. Jak uzyskać listę wszystkich plików wideo w telefonie iPhone?
- 21. Jak ustawić limit czasu nagrywania wideo w telefonie iPhone?
- 22. Jak zmienić kolor tła wskaźnika w telefonie iPhone X?
- 23. Montaż Maven: montaż
- 24. Debuguj niejasny błąd na telefonie iPhone
- 25. Bezpieczne informacje zawarte w telefonie iPhone SQLite DB
- 26. Jak uzyskać kod MCC i MNC na telefonie iPhone?
- 27. Jak poprawić wydajność wkładki obiektu Core Data na telefonie iPhone?
- 28. Jak zmienić domyślny kolor przycisku na telefonie iPhone?
- 29. Jak programowo odtwarzać pliki MP3 na telefonie iPhone?
- 30. Jak przesłać zapytanie do tabeli ARP na telefonie iPhone?
Nicea pytanie, jestem bardzo zainteresowany, aby zobaczyć odpowiedzi. – mdec