Fórum témák
» Több friss téma |
Azt még nem értem, hogy az én példaképpen felhozott ciklusomba hogyan tudom beépíteni??Minden egyes __delay sor helyett egy ilyen ciklus kell??
Idézet: „Mi az "uint16_t", és hol találok róla több infót?” Ezeket az újmódi (fix szélességű) változótípusokat tudomásom szerint a C99 standard vezette be, a hordozhatóság érdekében. Használatukhoz a stdint.h fejléc állományt be kell csatolni.
Nem, a program elején definiálod a függvényt, ahogy beírtam. Ahol szükséges, ott pedig meghívod:
Szerintem a __delay_cycles()-nek is működnie kell (én használom is), de annak annyi hátránya van, hogy inline függvény és futás közben nem adható meg a paramétere (a fordítónak már tudnia kell, hogy hány ciklus lesz a várakozás).
Köszönöm.
Egyszerű hangkeltés a LaunchPad-al:
A D1 diódát azért raktam belem, mert ha nincs benne valamiért lereseteli a uC-t.
Javítok:
helyett:
Bocsánat. kicsit elkapkodtam.
Próbáltam keresni normális felbontásban a kapcsolási rajzot és a programot, de sajnos nem találtam. A kapcsolódó fórumban kis felbontásban van ugyan rajz, de azon nem látszik jól semmi. Ott egy ilyet is olvastam: "The project is not finalized, I will add schematic and board later on." Tehát ez így még sajna nem után építhető. Pedig jó kis project... Vajon mikorra várhatóak a végleges rajzok és program?
Szia! Jól mutat a kép, mivel csináltad ( kipróbálni most nem tudom
![]() Steve
Fritzing-el. Az új verzióban benne van a LaunchPad is. Kiegészítőket egy fórumon lehet hozzá találni, de a címét nem tudom. Kicsit olvass vissza itt, icserny berakta a fórum címét is.
Valahogyan így gondoltad??
[ #include "io430.h" #include "intrinsics.h" #include "stdint.h" void main( void ) { void delay_ms(uint16_t delay) { uint16t_t i; for(i=0;i WDTCTL = WDTPW + WDTHOLD; P1DIR &= ~BIT4; //nyomógomb P1DIR |= BIT6; //LED while(1) { P1OUT = 0X00; while(~P1IN & BIT4) { P1OUT = 0X40; delay_ms(100); } } } } }] Mer sajna nem megy.Próbáltam több féle képen.Mert ha így jónak kellene lennie, akkor a gépem a felelős ezekért a furcsaságokért.Párszor kék halállal leállt, és csinált olyat is ,hogy az Avast egy része letörlődött.Adat visszaállítással sikerült javítani a hibát, de mi van ha az include állomány adatai is sérültek lettek??A fordító úgy nem igazán tud a kódokkal mit kezdeni.Már meg is rendeltem az új HDD-t a géphez.Csak szeretném ezeket a tanultakat gyorsan helyre rakni ,mi előtt a rossz verzió tudatosul bennem. ![]()
Így próbáld:
Általában a "main" függvény elött kell legyenek, a definiált függvények, és a sorrend is fontos, de ha deklarálod a függvényt, lehet utánna is. Bár ez nem a potos megfogalmazás, mert Én is csak kezdő vagyok C-ben.
Még egy. A "delay_ms" függvényben nem javítottam ki a hibát, de próbáld meg úgy beírni, ahogy icserny írta!
Te:
Icserny:
Így sem működik.A for ciklusban a zárójelek nem megfelelően vannak szintaktikailag.(kettő van megnyitva, és egy bezárva) De mind ezek ellenére sem működik.Azt írja ,hogy az "uint16_t nincsen degradálva!Ezek szerint akkor a gépem a felelős!
![]()
Nézd meg, hogy megvan-e az "stdint.h" állomány. C:\xx\xx\IAR System\....
A programodban uint16t_t szerepel, ami elírás, uin16_t kell.
Azt nem is figyeltem.
Más. Szétdaraboltam az Lcd menüs programomat, az átláthatóság kedvéért. Csináltam egy "menu.c"-t és egy "menu.h"-t. Viszont arra nem tudtam rájönni, hogy a menu.c-ben vagy a menu.h-ban kell deklarálni a változókat? Mármint ami a menu.c-ben szerepel. Egész nap evvel küzdök, de csak hibákat ír az IAR.
Valaki elírta jó pár hozzá szólással ez előtt
![]() De így sem jó.Ez az egyetlen hiba van benne a fordító szerint.És ott van az stdint.h a program könytárában is ,de ettől még lehet sérült az adatállománya.
Kipróbáltam, és hiba nélkül lefordította. A hiba az Ön gépében van. Próbaképp becsatoltam neked. Bár nemhiszem, hogy ezzel lenne a gond.
uin16_t helyett írhatod azt, hogy unsigned int. Ahhoz nem kell a stdint.h sem.
Ha a változót több helyről szeretnéd használni, akkor a header-ben extren-ként deklarálod, majd egy (de csak is egy) C fájlban definiálod.
Idézet: A .h fejléc állományba nem célszerű változót vagy végrehajtandó kódot tenni, mert egynél több fordítási egységbe (gyk. forrásfájl) is becsatolhatod, s akkor kétszer fordulna be... Tehát ha nem a főprogramban, akkor inkább a menu.c-ben deklarálj változót.„a menu.c-ben vagy a menu.h-ban kell deklarálni a változókat?” Ha máshonnan (másik fordítási egységben szereplő függvényből) is el kell tudni érni (pl. a main.c-ből), akkor ott is deklarálni kell a változókat extern módosítóval. Mindezt PIC tapasztalat alapján írtam, csak reménykedni tudok, hogy az IAR MSP430 C/C++ fordító is így tudja...
Az extren-el tisztában vagyok, de mivan akkor ha több C fáljban szeretném használni a változót? Pl. jelen programnál, van eddig 3db C fájl. (main.c, lcd4x16.c, menu.c) Ha a main.c-ben deklarálok egy változót, pl: extren unsigned int xy; a menu.c-ben ugyanez: unsigned int xy; és az lcd4x16.c-ben már nem tudom használni?
Nem biztos, hogy pont azt értem amit kérdeztél
![]() Pl. így csinálnám: main.h
main.c
foo.c
Ez így jó!!!
![]()
Nem jó mindig csak hiba jön. Tehát, azt szeretném, hogy mind a három fájlba megjelenjen.
main.c:
menu.c:
lcd4x16:
Ez is egyfajta próba, de nem jó. Most nézem a IAR helpjét.
Érdekes, nekem fordul úgy amit én írtam, és úgy is ahogy Te írtad. Csatoltam a projektjeimet, bár én CCS-t használok.
Ha a projektet nem is tudod megnyitni, ha a .c és .h fájlokat kézzel hozzáadod egy IAR projekthez mi történik? Most már kíváncsi vagyok nagyon, mert eddig azt hittem értem amit csinálok ![]()
Milyen hiba jön? Nálam lefordul és működik is.
Megszületett. Tehát jó amit lentebb írtam (#1138214), csak figyelmetlen voltam.
A main.c = int xy; menu.c extern int xy; lcd4x16 extern char xy; . Ezt akartam ráerőltetni a fordítóra. Miután észrevettem, hogy az lcd4x16-ban "char"-t írtam. Így jó, hogy nem fogadja el. Köszönöm szépen mindenkinek a segítséget. ![]()
Amúgy a hiba: Warning[w6] .... external/entry "poz" in module main...
Mégegyszer köszönöm. |
Bejelentkezés
Hirdetés |