FANDOM


Prepocesszor dolgokEdit

GCCEdit

Interrupt rutinokEdit

Az interrupt rutinok a Copmpiler doksiban vannak leírva. pl.: PIC24F-é a C30-as doksiban (109-oldal)

Ezenkívül megtalálható még a linker file-ban: <Compiler-DIR>\support\PIC24F\gld


SnippetsEdit

AsciitoHex

 unsigned char AsciiToHex(unsigned char n)
 {
      if(n < 0x3A)
         n = n - 0x30;
     else
         n = n - 0x57; 
 }

HextoDigit

 char hexDigit(unsigned n)
 {
      if (n < 10) {
          return n + '0';
      } else {
          return (n - 10) + 'A';
      }
  }


 void charToHex(char c, char hex[3])
  {
      hex[0] = hexDigit(c / 0x10);
      hex[1] = hexDigit(c % 0x10);
      hex[2] = '\0';
  }


Static FüggvényEdit

static int proba()

az adott modulra nézve lokálissá teszi a proba függvény láthatóságát, azaz másik modulban lévő függvényből nem tudod meghívni (a linker hibát fog jelezni). Egyébként (static nélkül) a függvények teljesen globálisak, azaz elvileg bármely modulból meghívhatod (külön deklaráció nélkül is akár, ha int-et ad vissza).

A trükk a static-ban az, hogy van egy másik jelentése is: ha (függvényre nézve) lokális változóra alkalmazod, ekkor azt jelenti, hogy maradjon meg az értéke a két függvényhívás között (nem a stack-en foglal neki helyet a fordító), hanem egy fix memóriahelyen

Constant PointersEdit

<type of pointer> * const <name of pointer>

Példa:

int * const ptr;

Struct pointer return Edit

 struct CircularBuffer* get_cbu(void)
 
 {
 
     return (&cbu);
 
 }


Function PointerEdit

int (*POINTER_NAME)(int a, int b)


This will work even if the function pointer returns a pointer to something:

  • Write it: char *make_coolness(int awesome_levels)
  • Wrap it: char *(*make_coolness)(int awesome_levels)
  • Rename it: char *(*coolness_cb)(int awesome_levels)

Attribute Weak Edit

https://en.wikipedia.org/wiki/Weak_symbol

Arra szolgál, hogy el lehet nevezni ugyanúgy az objektumokat, nem dob fordítási hibát a linker. Azonban linkelésnél a strong objektum (default) felül fogja írni a weak szimbólumot

Typdef enum trükkEdit

Ha az enum végére beszurunk egy NUM elemet, akkor a ciklusokban ugyesen fel lehet hasznalni a "dinamikus" méreteket. Egyszerű utólag bővíteni

    typedef enum {
        ALARM_LOW_PRIOR              =  0,
        ALARM_MED_PRIOR              =  1,
        ALARM_HIGH_PRIOR             =  2,
        NUM_ALARMS,
    } admit_fsm_alarms;
 
for(int i=0,i<NUM_ALARMS, i++)
 ....

Demo megoldasokEdit

CTomb elemeinek osszeadasa

CFesus rendezes