Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   146 / 153
(#) usane válasza Bakman hozzászólására (») Aug 29, 2020 /
 
Értem. Ezt nem tudtam.
Van belőle 16-32 bites is vagy csak 8?
(#) Bakman válasza usane hozzászólására (») Aug 29, 2020 /
 
Csak 8 bites kontrollereket ismer, abból sem a legújabbakat. Igaz, így is van választék: Bővebben: Link.
(#) Hp41C válasza Bakman hozzászólására (») Aug 29, 2020 /
 
És ingyenes.
(#) usane hozzászólása Szept 15, 2020 /
 
Üdv!

Egy kis programozási kérdés. Hogy lehet változó értékből (karaktertömb, vagy string)egy másik változót létrehozni? Megoldható?
például:
  1. String nev = "valtozo";

Lehet ebből pl: uint8_t valtozo vagy akármilyen típusú változó, anélkül, hogy egy vizsgálat után direkt módon deklarálom?
(#) Hp41C válasza usane hozzászólására (») Szept 15, 2020 / 1
 
char nev[8] = {'v','a','l','t','o','z','o'};
Egy karakter tömb neve egyben egy char* poniter is a tömbre. Ezt más típussá is konvertálhatod (int*)nev; (unsigned char*)nev; stb. Vigyázat mély víz, csak úszóknak.
Ha az egyes karaktereket akarod elérni char -ként: nev[5];
Ha ezzel a karakterrel műveletet szeretnél végezni számként: (int)nev[5]; (byte)nev[5]; stb.
Ha a karakterláncot karakterekkel leírt számként kell értelmezni -> scanf()
A hozzászólás módosítva: Szept 15, 2020
(#) usane válasza Hp41C hozzászólására (») Szept 15, 2020 /
 
Igen, ezekkel tisztában vagyok. Félreértetted mit szeretnék. Habár saját elgondolásom szerint nem megvalósítható, de gondoltam felteszem hátha van rá valami megoldás.
A nev[] tömb értékeit szeretném felhasználni deklarálásra, tehát a példa alapján "valtozo" nevvel szeretnek deklaralni változót.
pl: char valtozo;
Továbbá ezt nem direkt akarom deklarálni tehát nem megvizsgálni, hogy ha az ertekeket összeolvasva "valtozo" jön ki akkor deklaralok valamit valtozo névvel, hanem ami a nev[]tombben van azt használni.
A hozzászólás módosítva: Szept 15, 2020
(#) icserny válasza usane hozzászólására (») Szept 15, 2020 /
 
Futási időben nem fogsz tudni változót deklarálni. De amihez a "röptében deklarált változó" kellene, föltehetőleg mutató típusú változókkal megoldható.
(#) Hp41C válasza usane hozzászólására (») Szept 15, 2020 /
 
Micropython for PIC
(#) usane válasza Hp41C hozzászólására (») Szept 16, 2020 /
 
Az a baj, hogy nem PIC-hez kell, ezért a programnyelv a jelenlegi tudásom okkán C,C++ -ra korlátozódik.
(#) usane válasza icserny hozzászólására (») Szept 16, 2020 /
 
Miután átgondoltam mit is akarok rájöttem, hogy rosszul fogalmaztam meg a kérdést.
Lehet, hogy nem is ide kellett volna feltennem, mert nem is PIC hanem ESP32, de mivel egy C programozástechnikai kérdés ezért gondoltam jó helyen lesz, de átgondolva már nem annyira. Arduino témában folytatom.
(#) usane válasza icserny hozzászólására (») Szept 16, 2020 /
 
Itt igyekeztem konkretizálni a feladatot.
Ezt a pointeres dolgot kifejtenéd, ha az ott leírtak alapján működne a javaslatod?
(#) Hp41C válasza usane hozzászólására (») Szept 16, 2020 /
 
Semmi gond: MicroPython for ESP32
A python szótár típusa pont ezt csinálja.
(#) usane válasza Hp41C hozzászólására (») Szept 16, 2020 /
 
Szuper! Átnézem, köszönöm.
(#) icserny válasza usane hozzászólására (») Szept 17, 2020 /
 
Fogalmam sincs, de valószínűleg a "C/C++ linked list" vagy 'Arduino Jason library' kulcsszavakra keresnék.

ESP32 esetén viszont a micropython számomra szimpatikusabb választás, mint az Arduino környezet. Kövesd Hp41C tanácsát!
(#) usane válasza icserny hozzászólására (») Szept 17, 2020 /
 
Rendben, köszönöm.
(#) zsolt58 hozzászólása Feb 17, 2021 /
 
Sziasztok.
Lehet hülye kérdés de ezt a fájlt kaptam mint c nyelv. Ezt szeretném futtatni Arduinoba. Erre van valami converter vagy, hogyan tudnám normális C nyelvre forditani?
Üdv.

  1. void main()
  2. {
  3.        
  4. const long int demo_bin_size = 22900;
  5. const unsigned char demo_bin[22900] = {
  6.     0x00, 0x50, 0x00, 0x20, 0x79, 0x18, 0x00, 0x08, 0x31, 0x1B, 0x00, 0x08, 0x35, 0x1B, 0x00, 0x08,
  7.     0x39, 0x1B, 0x00, 0x08, 0x3D, 0x1B, 0x00, 0x08, 0x41, 0x1B, 0x00, 0x08, 0x91, 0x1B, 0x00, 0x08,
  8.     0x91, 0x1B, 0x00, 0x08, 0x91, 0x1B, 0x00, 0x08, 0x91, 0x1B, 0x00, 0x08, 0x91, 0x1B, 0x00, 0x08,
  9.     0x91, 0x1B, 0x00, 0x08, 0x91, 0x1B, 0x00, 0x08, 0x91, 0x1B, 0x00, 0x08, 0xE5, 0x2A, 0x00, 0x08,
  10.     0x91, 0x1B, 0x00, 0x08, 0x91, 0x1B, 0x00, 0x08, 0x91, 0x1B, 0x00, 0x08, 0x91, 0x1B, 0x00, 0x08
(#) superuser válasza zsolt58 hozzászólására (») Feb 17, 2021 / 1
 
A szintaktika hiába C, mivel ez valójában egy bináris tartalom.
Ha "lefordítja" a compiler, a linker ismét bináris (gondolom .hex) állományt készít belőle, amit feltölthetsz a processzorra.
De ebből olvasható C forráskód már nem lesz.
kieg: És mivel bináris tartalom, ezért csak azon a processzor családon fog futni, amire eredetileg írták.
A hozzászólás módosítva: Feb 17, 2021
(#) zsolt58 válasza superuser hozzászólására (») Feb 17, 2021 /
 
És egy BIN fájlbol?
  1. P  y 1 5 9 = A ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ĺ* ‘ ‘ ‘ ‘ ‘ ‘ • µ Ő ő  Ů ń   % A ] y       ‘ %2 ‘ ‘ 5 i- Ť- ±- ĺ- 5. ˇ. 
  2. / Ý((( ) ‘ ‘ ń/ Y0 Á0 y ‘ ‘ µL#x3ąK±HŻó €##p˝¸      ¨K µK±HIŻó €Hh±K±˜G˝    ¨K Ľ  ¸      řµF F %ä±HP!đű,4ż&F&)F
  3. Hđ7ű¤y2FHđEű5DHä˛đ
(#) superuser válasza zsolt58 hozzászólására (») Feb 17, 2021 / 1
 
Nincs a mondatodnak állítmánya, de ha azt akartad kérdezni, hogy ebből lesz-e C forrás, akkor a válasz határozott nem.
(#) zsolt58 válasza superuser hozzászólására (») Feb 17, 2021 /
 
Értem. Köszi.
(#) Lamprologus válasza zsolt58 hozzászólására (») Feb 18, 2021 / 1
 
Ez lehet egy C nyelvű fájl ... Eleje!!!

Hiányzik a folytatása!

Létrehoz egy tömböt, elkezdi feltölteni értékekkel ... és abbamarad ...

Vagy csak Te nem másoltad ide a teljes fájlt!
(#) Elektro.on válasza zsolt58 hozzászólására (») Feb 18, 2021 / 1
 
Ez C nyelv, ahogy Lamprologus is írta, de hiányzik az eleje is és a vége is.
De amennyiben ez valamelyik PIC re készült (perszhe ha a többi kód rész is megvan) Nem lehet csak úgy átrakni másik PIC kontrollerbe, és főleg nem Arduino -ba.
Az eltérő konfigurációk miatt mindenképpen át kell az ide vonatkozó részeket írni a cél hardvernek megfelelően.
A hozzászólás módosítva: Feb 18, 2021
(#) zsolt58 válasza Elektro.on hozzászólására (») Feb 18, 2021 /
 
Igen, köszönöm.
(#) AZoli hozzászólása Márc 15, 2021 /
 
Sziasztok!
PIC24EP széria, XC16 fordító.
Vannak ilyen, a programmemóriában tárolt táblázataim:
  1. const char __attribute__((space(psv))) image_data_Font_32_Arial_Bold_0x20[64] = {
  2.     0x12, 0x34,
  3.     0x00, 0x00,
  4.     0x00, 0x00,
  5.     0x00, 0x00,
  6.     0x00, 0x00,
  7.     0x00, 0x00,
  8.     0x00, 0x00,
  9.     0x00, 0x00,
  10.     0x00, 0x00,
  11.     0x00, 0x00,
  12.     0x00, 0x00,
  13.     0x00, 0x00,
  14.     0x00, 0x00,
  15.     0x00, 0x00,
  16.     0x00, 0x00,
  17.     0x00, 0x00,
  18.     0x00, 0x00,
  19.     0x00, 0x00,
  20.     0x00, 0x00,
  21.     0x00, 0x00,
  22.     0x00, 0x00,
  23.     0x00, 0x00,
  24.     0x00, 0x00,
  25.     0x00, 0x00,
  26.     0x00, 0x00,
  27.     0x00, 0x00,
  28.     0x00, 0x00,
  29.     0x00, 0x00,
  30.     0x00, 0x00,
  31.     0x00, 0x00,
  32.     0x00, 0x00,
  33.     0x98, 0x99
  34. };
  35. const tImage __attribute__((space(psv))) Font_32_Arial_Bold_0x20 = { image_data_Font_32_Arial_Bold_0x20,
  36.     9, 32, 8};
  37.  
  38. const char __attribute__((space(psv))) image_data_Font_32_Arial_Bold_0x21[64] = {
  39.     0x00, 0x00,
  40.     0x00, 0x00,
  41.     0x1e, 0x00,
  42.     0x1e, 0x00,
  43.     0x1e, 0x00,
  44.     0x1e, 0x00,
  45.     0x1e, 0x00,
  46.     0x1e, 0x00,
  47.     0x1e, 0x00,
  48.     0x1e, 0x00,
  49.     0x1e, 0x00,
  50.     0x1e, 0x00,
  51.     0x1e, 0x00,
  52.     0x0c, 0x00,
  53.     0x0c, 0x00,
  54.     0x0c, 0x00,
  55.     0x0c, 0x00,
  56.     0x0c, 0x00,
  57.     0x0c, 0x00,
  58.     0x00, 0x00,
  59.     0x00, 0x00,
  60.     0x1e, 0x00,
  61.     0x1e, 0x00,
  62.     0x1e, 0x00,
  63.     0x1e, 0x00,
  64.     0x00, 0x00,
  65.     0x00, 0x00,
  66.     0x00, 0x00,
  67.     0x00, 0x00,
  68.     0x00, 0x00,
  69.     0x00, 0x00,
  70.     0x00, 0x00
  71. };
  72. const tImage __attribute__((space(psv))) Font_32_Arial_Bold_0x21 = { image_data_Font_32_Arial_Bold_0x21,
  73.     10, 32, 8};
  74.  
  75. const char __attribute__((space(psv))) image_data_Font_32_Arial_Bold_0x22[64] = {
  76.     0x00, 0x00,
  77.     0x00, 0x00,
  78.     0x3c, 0x3c,
  79.     0x3c, 0x3c,
  80.     0x3c, 0x3c,
  81.     0x3c, 0x3c,
  82.     0x3c, 0x3c,
  83.     0x3c, 0x3c,
  84.     0x3c, 0x3c,
  85.     0x18, 0x18,
  86.     0x00, 0x00,
  87.     0x00, 0x00,
  88.     0x00, 0x00,
  89.     0x00, 0x00,
  90.     0x00, 0x00,
  91.     0x00, 0x00,
  92.     0x00, 0x00,
  93.     0x00, 0x00,
  94.     0x00, 0x00,
  95.     0x00, 0x00,
  96.     0x00, 0x00,
  97.     0x00, 0x00,
  98.     0x00, 0x00,
  99.     0x00, 0x00,
  100.     0x00, 0x00,
  101.     0x00, 0x00,
  102.     0x00, 0x00,
  103.     0x00, 0x00,
  104.     0x00, 0x00,
  105.     0x00, 0x00,
  106.     0x00, 0x00,
  107.     0x00, 0x00
  108. };
  109. const tImage __attribute__((space(psv))) Font_32_Arial_Bold_0x22 = { image_data_Font_32_Arial_Bold_0x22,
  110.     15, 32, 8};
  111.  
  112. ...
  113.  
  114. const tChar __attribute__((space(psv))) Font_32_Arial_Bold_array[] =
  115. {
  116.   {0x20, &Font_32_Arial_Bold_0x20},  // character: ' '
  117.   {0x21, &Font_32_Arial_Bold_0x21},  // character: '!'
  118.   {0x22, &Font_32_Arial_Bold_0x22},  // character: '"'
  119. ...
  120.  
  121. };

Ezeket szeretném egyetlen struktúrába tenni, hogy a fordító rá legyen kényszerítve, hogy egyetlen összefüggő programmemória területre pakolja őket. Mert csak így lesz esélyem PSV segítségével elérni őket.
Próbálom, de már belekeveredtem:
  1. typedef struct
  2. {
  3.  char image_data_Font_32_Arial_Bold_0x20[64];
  4.  tImage Font_32_Arial_Bold_0x20;
  5.  
  6.  char image_data_Font_32_Arial_Bold_0x21[64];
  7.  tImage Font_32_Arial_Bold_0x21;
  8.  
  9.  char image_data_Font_32_Arial_Bold_0x22[64];
  10.   tImage Font_32_Arial_Bold_0x22;
  11.  
  12.   tChar Font_32_Arial_Bold_array[];
  13. }Fstr;
  14.  
  15. const Fstr __attribute__((space(psv))) FontStruct
  16. {
  17.   image_data_Font_32_Arial_Bold_0x20[64] = {
  18.     0x12, 0x34,
  19.     0x00, 0x00,
  20.     0x00, 0x00,
A hozzászólás módosítva: Márc 15, 2021
(#) cross51 válasza AZoli hozzászólására (») Márc 15, 2021 / 2
 
Ha teljesen címfolytonosan akarod őket pakolni akkor __attribute__((packed)) is kelleni fog (nem tudom, hogy a structot paddeli e a fordító ilyenkor), ez a struktozás nem tudom menyire jó eljárás, de elvileg ezt a designated initializers-el tudod inicializálni (tegyél elé egy '.'-ot).
Tehát:
  1. const Fstr __attribute__((space(psv))) FontStruct
  2. {
  3.   .image_data_Font_32_Arial_Bold_0x20[] = {
  4.     0x12, 0x34,
  5.     0x00, 0x00,
  6.     0x00, 0x00,


Ennél elegánsabb megoldás lehet az, hogy a linker scriptbe csinálsz egy regeion-t a psv memória tartományba és utána __attribute__((section("psv_font"))) írsz azokhoz amit szeretnél ebbe folytonosan bepakolni. Vagy itt lehet elég ha csak mögé írsz __attribute__((region("myregion")))-t mert akkor egy helyre teszi elvileg de az a baj már rég foglalkoztam Microchip-el és lehet van más attribútum amivel ezt meg lehet csinálni, mert van egy pár speckó attribútum az M-nél.

Vagy még egy megoldás (ha már speckó attribútumok) __attribute__((address(0x...)))-el fix helyre tudod őket rakni és tudod a tömb méretét és annyival növelsz mindig a címen.
(#) AZoli válasza cross51 hozzászólására (») Márc 15, 2021 /
 
Köszönöm!
Az __attribute__((section("psv_font"))) is jó ötlet, de ahhoz ismernem kéne a lefoglalandó memória méretét, mert ha túl nagy, kiszúrásból úgy is szétszórja benne a fordító.

Az volt a terv hogy __attribute__((address(0x...))) -el egy helyre teszem az így elkészült struktúrát. Arra is figyelnem kell, hogy ne kerüljön page határra, egy 16 bites változóval címezhető legyen. De külön-külön nem megy az address, mert 96 x kéne címet számolnom. Nem másoltam be a teljes fájlt, mert közel 7000 sor.
Ezzel az eredeti fájllal és az alábbi kóddal elérem az első két elemet, de a harmadik már hülyeséget ad vissza, feltételezem hogy azért, mert össze - vissza vannak a memóriában.
  1. DSRPAG = __builtin_psvpage (Font_32_Arial_Bold_array);
  2.     byte *ImageStartAddress = Font_32_Arial_Bold_array[FontNum].image->data;
  3.     uInt Height = Font_32_Arial_Bold_array[FontNum].image->height;
  4.     uInt Width = Font_32_Arial_Bold_array[FontNum].image->width;

Ehhez a "designated initializers" -hez is kell a typedef?
Mert ugye az volt az első problémám, hogy a struktúra definiálása és az inicializálás nem ment egyben. Ezért került bele a typedef, aztán elvesztem, onnantól nem sikerült fordulóképes kódot írni. Az volna a cél, hogy a később csatolt fájlon a legkevesebb változtatás árán működjön a dolog.
A hozzászólás módosítva: Márc 15, 2021
Moderátor által szerkesztve
(#) AZoli válasza AZoli hozzászólására (») Márc 15, 2021 /
 
Csatolom a jó fájlt. Szóval ez az, amivel az első 2 elem (0x20 0x21) jól működik. Ezt próbálom egy struktúrába szervezni így, de nem megy:
  1. typedef struct
  2. {
  3.  char image_data_Font_32_Arial_Bold_0x20[64];
  4.  tImage Font_32_Arial_Bold_0x20;
  5.  
  6.  char image_data_Font_32_Arial_Bold_0x21[64];
  7.  tImage Font_32_Arial_Bold_0x21;
  8.  
  9.  char image_data_Font_32_Arial_Bold_0x22[64];
  10.   tImage Font_32_Arial_Bold_0x22;
  11.  
  12.   tChar Font_32_Arial_Bold_array[];
  13. }Fstr;
  14.  
  15. const Fstr __attribute__((space(psv))) FontStruct
  16. {
  17.   .image_data_Font_32_Arial_Bold_0x20[] = {
  18.     0x00, 0x00,
  19.     0x00, 0x00,
  20.     0x00, 0x00,
  21.     0x00, 0x00,
  22. ...
  23.  
  24.  .Font_32_Arial_Bold_array[] =
  25. {
  26.   {0x20, &Font_32_Arial_Bold_0x20},  // character: ' '
  27.   {0x21, &Font_32_Arial_Bold_0x21},  // character: '!'
  28.   {0x22, &Font_32_Arial_Bold_0x22}  // character: '"'

A const Fstr __attribute__((space(psv))) FontStruct sorra azt mondja a fordító hogy
Idézet:
„error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token”

Font_32.c
    
(#) cross51 válasza AZoli hozzászólására (») Márc 15, 2021 / 1
 
Nagyon keveset PIC24-eztem így csak fogalom szinten vagyok képbe a PSV-vel.

De elvileg működik typedef nélkül is meg azzal is, nekem így fordult mindkettő igaz VS-ben fordítottam a typedefnek működnie kell C-ben is.

  1. // Typedef
  2. const Fstr FontStruct
  3. {
  4.         .image_data_Font_32_Arial_Bold_0x20 =
  5.         {
  6.                 0x00, 0x00
  7.         },
  8.  
  9.         .Font_32_Arial_Bold_0x20 =
  10.         {
  11.                 .data = NULL,
  12.                 .width = 0,
  13.                 .height = 0,
  14.                 .dataSize = 0,
  15.         },
  16.  
  17.         .image_data_Font_32_Arial_Bold_0x21 =
  18.         {
  19.                 0x01, // ...
  20.         }
  21. };
  22.  
  23. // Without Typedef
  24. struct
  25. {
  26.         char image_data_Font_32_Arial_Bold_0x20[64]
  27.         {
  28.                 0x00,
  29.         };
  30.         tImage Font_32_Arial_Bold_0x20
  31.         {
  32.                 .data = 0,
  33.         };
  34.  
  35.         char image_data_Font_32_Arial_Bold_0x21[64];
  36.         tImage Font_32_Arial_Bold_0x21;
  37.  
  38.         char image_data_Font_32_Arial_Bold_0x22[64];
  39.         tImage Font_32_Arial_Bold_0x22;
  40.  
  41.         tChar Font_32_Arial_Bold_array[64];
  42.  
  43. }Fstr;
(#) AZoli válasza cross51 hozzászólására (») Márc 17, 2021 /
 
Köszönöm a segítséget, hiányzott egy egyenlőségjel:
  1. const Fstr FontStruct __attribute__((space(psv), address(0x8000))) =
  2. {
  3.     .image_data_Font_32_Arial_Bold_0x20 =
  4.     {
  5.         0x00, 0x00,
  6.         0x00, 0x00,
(#) Laja1 hozzászólása Ápr 12, 2021 /
 
Sziasztok!
Pár hónapja ismerkedek a PIC C nyelvű programozással, nagyon sok hasznosat olvastam itt. Megírtam egy egyszerű programot, de sajnos nem működik. A munkám során szükségem volna helyiségek ajtajainak reteszelésére. Ha egy ajtó nyitásérzékelője (reed-relé) jelzi, hogy nyitva van, akkor a párját mágnessel megfogja. MPLAB X IDE v.5.45. környezetben írtam C nyelven. Mellékelem. PIC 16F716 használok. 6 pár ajtó van. Proteus 8 szoftverrel szimulálom és az történik, hogy az RA0-RA3 négy bemenetre nem reagál, csak az RA4 és az RB0 bemenetekre. Azok rendben vannak. Bár az RB0 bemenetnél egyértelműen piros a megfelelő kimenet, de az RA4-nél villog a piros jelzés a neki megfelelő helyen. Nem értem miért különbözik. Van valakinek ötlete, hogy hol szúrtam el? Még annyi, hogy a pragma sorokat ki kellett kommentelnem, mert, ha azok éltek, akkor hibára futott a program. A segítséget előre is köszönöm!
Következő: »»   146 / 153
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