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) |
Bejelentkezés
Hirdetés |