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.
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