Fórum témák
» Több friss téma |
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?
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
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.
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)
Még ha fix cimre rakom is, az 5-ös sorra "initializer element is not a compile-time constant" a forditó reakciója.
MCU folyamatosan újraindulSziasztok.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
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
|
Bejelentkezés
Hirdetés |