Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   177 / 177
(#) sszasza hozzászólása Aug 21, 2024 /
 
Sok flash memoriaban tárolt és mindig flashre mutató static const char* pointerem van, ami sok helyet foglal, mert 32bitesek a pointerek. A flash maga csak 32kB, tehát 16 bites pointerek is lehetnének. Lehet csökkenteni a méretüket valahogy 16 bitre?
(#) asch válasza sszasza hozzászólására (») Aug 22, 2024 /
 
  1. static const uint32_t base;
  2. static const uint32_t alma;
  3.  
  4. static const char * basePtr=&base;
  5. static const int16_t offset_alma=(int16_t)(((char *)(&alma)) - (char *)&base);
  6.  
  7. void let_alma_be_112()
  8. {
  9.   *(int32_t *)(basePtr+offset_alma) = 112;
  10. }


base és alma típusa bármi lehet. Ha tudod mire van mappelve a flash címe, akkor konstans számot is használhatsz a basePtr helyett. És akkor az offset tuti pozitív lesz, lehet uint16_t-re is kasztolni.
C-ben a pointerek is csak számok, lehet aritmetikát végezni velük, illetve számmá castolni és vissza, csak ismerni kell az architektúrát, hogy mi működik és mi nem. Ha a pointer nem char típusú, akkor a kivonás és hozzáadás akkora egységekben történik, amire mutat a pointer, erre figyelni kell, ezt el lehet rontani. De nyerni is lehet vele, ha mondjuk 4 bájtos egységeid vannak (pl uint32_t), akkor 2 bájtos címmel 256 kB-ot is tudsz címezni.
A hozzászólás módosítva: Aug 22, 2024
(#) benjami válasza sszasza hozzászólására (») Aug 24, 2024 /
 
Azt azért érdemes megnézni, hogy a pointerenkénti 2 bájt nyereség nem úszik-e el a 16 bites pointer felhasználásához szükséges bonyolultabb (és ez miatt hosszabb) kód miatt.
(#) sszasza hozzászólása Szept 14, 2024 /
 
Ezt a csodálatos hibaüzenetet kapom időnként fordításnál. Majd elmondom miért nem értem, de először is, pontosan mi baja is van a write_RealTime-al?
.\Objects\jcd.axf: Error: L6286E: Relocation #REL:5 in jcd1.o(.text.write_RealTime) with respect to Veneer$$LitPool. Value(0xfffff543) out of range(0 - 0xff) for (R_ARM_THM_PC8)
(#) sszasza válasza asch hozzászólására (») Szept 15, 2024 /
 
Még ha fix cimre rakom is, az 5-ös sorra "initializer element is not a compile-time constant" a forditó reakciója.
(#) cimopata hozzászólása Szo, 23:13 /
 

MCU folyamatosan újraindul

Sziasztok.

Elsőnek fejlesztek egy vezérlőt STM32G474 procival.

Nagyon nehezen sikerül még egy ledet is villogtatnom mert sokszor el sem indult a program.
Már leszedtem mindent csak egy LED van és azt akarom pörgetni.
Sikerült oda eljutnom hogy a program elindul de szabályosan 400msec után újra újra indul.

Elszórakoztam vele újabb 3 órát és az megoldotta az folyamatos restartot hogy bekapcsoltam az options byte ben a WWDG_SW és IWDG_SW biteke.

A kérdésem annyi lenne hogy mit csinálnak ezek a bitek és miért működik a program ezekkel és nélkülük miért nem?

köszi
(#) vargham válasza cimopata hozzászólására (») Vas, 5:34 / 1
 
Azért indul újra, mert ez az elvárt működés.
Bővebben: Datasheet 3.24.6 és 3.24.7
A pipa azt jelenti a kétféle watchdog előtt, hogy szoftverből kapcsolod be őket. Ha nincs pipa, akkor automatikusan indulnak. Mivel nem eteted őket, az idő lejártával újraindítják a mikrokontrollert.
Bővebben: Reference manual 42.3.3 és 43.3.2
A hozzászólás módosítva: Vas, 5:36
Következő: »»   177 / 177
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem