Hirdetés
- Derült égből villámcsapás: vége a Ford elektromos kalandjának
- Januártól igényelhető a kiskorúak tartalomvédelme a mobilszolgáltatóknál
- Korai iOS árulkodik arról, milyen eszközök várhatók az Apple-től a közeljövőben
- Névlegesen nyer üzemidőcsatát a Honor új szériája
- Decembertől kapható itthon a Baseus Inspire szériája
- Google Pixel topik
- Milyen okostelefont vegyek?
- Xiaomi 15T Pro - a téma nincs lezárva
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Megbüntették, ezért feloszlatná az EU-t Elon Musk
- Xiaomi 14T Pro - teljes a család?
- Poco F8 Ultra – forrónaci
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Mobil flották
- Huawei Watch GT 4 - kerek karék
Új hozzászólás Aktív témák
-
stepboy
csendes tag
válasz
CPT.Pirk
#5790
üzenetére
Valószínű, hogy máshol van a hiba, ami kihatással van az USB működésére. A projekt többi része működik/meg lehet állapítani, hogy működik?
Viszont a kódot biztosan rossz:
__attribute __((naked))
void delay_loop (unsigned n)
{
__asm volatile ("1: sub r0, #1");
__asm volatile (" bne 1b");
__asm volatile (" bx 1r");
}[Itt találod a GCC Basic Asm leírását]
Van benne néhány fontos megjegyzés:
Do not expect a sequence of asm statements to remain perfectly consecutive after compilation. If certain instructions need to remain consecutive in the output, put them in a single multi-instruction asm statement. Note that GCC’s optimizers can move asm statements relative to other code, including across jumps.vagy ezek:
GCC does not parse basic asm’s AssemblerInstructions, which means there is no way to communicate to the compiler what is happening inside them. GCC has no visibility of symbols in the asm and may discard them as unreferenced. It also does not know about side effects of the assembler code, such as modifications to memory or registers. Unlike some compilers, GCC assumes that no changes to general purpose registers occur. This assumption may change in a future release.For basic asm with non-empty assembler string GCC assumes the assembler block does not change any general purpose registers, but it may read or write any globally accessible variable.
Megnéztem az optimalizációs leírást is, O3-mal jön az inline valóban, de azt ki lehet kapcsolni "noinline" attribute-tal (bár ez egy jó régi GCC: 4.7.4).
Ami a megjegyzéseket illeti, az elsőt nem hiszem, hogy vonatkozik rád a volatile miatt, tehát a sorrend marad. Viszont az inline miatt előfordulhat, hogy nem az van az R0-ban, amire számítasz. Normál esetben a függvényhíváskor az első paraméter valóban oda kell, hogy kerüljön, de ha a függvényt inline-olja a fordító, akkor már nincs garantálva, hogy az R0-án keresztül ad át bármit is, mivel a fordító nem látja, hogy bármi is történik az "n" változóval és azt feltételezi, hogy a regisztereket nem módosítja az assembly kódod.
Azt gondolom, hogyha már mindenképpen beágyazott assembly-t akarsz írni, akkor azt valahogy így kéne csinálni:
void delay_loop (unsigned n)
{
__asm ("1: sub %0, #1 \n\t"
" bne 1b \n\t"
" bx 1r "
:
: "r" (n));
}Mindezt az Extended-Asm leírás alapján (a fenti link következő oldala); itt már jelzed a fordítónak, hogy egy regisztert biztosan használsz és minden egy helyen van, ezért nem változhat meg a sorrend.
Bár a legjobb mindenképpen az lenne, ha az egészet átrakod sima assemblyre és akkor a fordító számára egy függvényhívás lesz a kód, amivel már nem tud trükközni.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Mibe tegyem a megtakarításaimat?
- Battlefield 6
- Kínai és egyéb olcsó órák topikja
- exHWSW - Értünk mindenhez IS
- Videós, mozgóképes topik
- Gaming notebook topik
- Videó stream letöltése
- EAFC 26
- Milyen légkondit a lakásba?
- További aktív témák...
- Xiaomi Electric Scooter 5 Max szinte új, teljes csomag, karácsonyi ajándéknak is tökéletes!
- Lenovo ThinkPad P1 Gen 4/16.0/UHD 4K(3840x2160)/IPS/i7-11850H/64GB RAM/512GB SSD/RTX A2000/5G LTE
- Szinte új, ABUS AirDrop MIPS sisak (szürke-zöld) L-XL eladó!
- XBOX ONE S All Digital 1TB, dobozában, 6 hónap teljeskörü garanciával, üzletből eladó!
- PlayStation 4 Pro 1TB SW:11.50 + JB lemez, frissen pasztázva, 6 hó garanciával, Bp-i üzletből eladó!
- Dell Precision 7560 - Intel Core i9-11950H RTX A4000 32GB 1TB SSD FHD
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB DDR5 RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! ASRock B450 R5 5600X 16GB DDR4 512GB SSD RTX 3060 12GB Zalman Z1 Plus Cooler Master 750W
- iKing.Hu - HONOR 400 Lite 5G Velvet Grey Vékony, könnyű, AI-kameragomb 8/256 GB- 2027. 07. 01
- HIBÁTLAN iPhone 12 mini 64GB Purple -1 ÉV GARANCIA - Kártyafüggetlen, MS3481
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: ATW Internet Kft.
Város: Budapest


