Fórum témák
» Több friss téma |
Értem. Ezt nem tudtam.
Van belőle 16-32 bites is vagy csak 8?
Csak 8 bites kontrollereket ismer, abból sem a legújabbakat. Igaz, így is van választék: Bővebben: Link.
Ü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:
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?
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
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
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ó.
Micropython for PIC
Az a baj, hogy nem PIC-hez kell, ezért a programnyelv a jelenlegi tudásom okkán C,C++ -ra korlátozódik.
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.
Itt igyekeztem konkretizálni a feladatot.
Ezt a pointeres dolgot kifejtenéd, ha az ott leírtak alapján működne a javaslatod?
Semmi gond: MicroPython for ESP32
A python szótár típusa pont ezt csinálja.
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!
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.
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
És egy BIN fájlbol?
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.
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!
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
Igen, köszönöm.
Sziasztok!
PIC24EP széria, XC16 fordító. Vannak ilyen, a programmemóriában tárolt táblázataim:
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:
A hozzászólás módosítva: Márc 15, 2021
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:
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.
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.
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
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:
A const Fstr __attribute__((space(psv))) FontStruct sorra azt mondja a fordító hogy Idézet: „error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token”
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.
Köszönöm a segítséget, hiányzott egy egyenlőségjel:
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! |
Bejelentkezés
Hirdetés |