Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   137 / 153
(#) cross51 válasza c27 hozzászólására (») Jan 1, 2017 /
 
Időt mérni az Mplab X-ben lehet a stopwatch-al, ami nem pont időt mutat, hanem utasítás ciklust, de abból vissza lehet számolni.
A + idő csúszás szerintem abból van, hogy szerintem a C18 az XC8-al hasonlóan működik, tehát a megszakítás nem csak az amit te beírsz, ment egy pár változót a megszakítás elején, ami lehet pont az az idő veszteség.
(#) Hp41C válasza c27 hozzászólására (») Jan 1, 2017 /
 
Mire a programod elér a T1CONbits.TMR1ON=0; utasításra, a TMR1L regiszter értéke már nem nulla. Ki kellene olvasni és a kiolvasott értékkel korrigálni kellene a beírandó értéket.
(#) foxi63 válasza c27 hozzászólására (») Jan 2, 2017 /
 
Szia!
Idézet:
„Sajnos az mplabban nem jöttem rá, hogy hol lehetne lemérni azt az időt”

megtalálod: Debugger->stopwatch.
A timer 1 utsítással megállítható és elindítható, tehát leállítod, beírod az értéket és ahonnan kell mérnie ott elindítod. ekkor 100n sec a hiba, de még ez is korrigálható.
üdv.:Foxi
(#) c27 válasza cross51 hozzászólására (») Jan 2, 2017 /
 
Én is valami hasonlóra gyanakodtam, viszont ez az új mplab nekem elég idegen. Pár éve asm-ben kezdtem a programozást és az a felület sokkal átláthatóbb volt, itt a debug projectre kattintva nem látom egyáltalán a nyilat hogy hol jár a program, hiába léptetem egyesével sehol semmi. A disassembly listingben sem látom hol jár a program. MPLAB X IDE v.3.35 van fent.
Majd nézek pár tutorialt, mert mióta C-ben próbálkozok eddig csak mint fordítót használtam az mplabot, de legalább a csúszás okát megtudtam köszönöm mindenkinek a segítséget!
(#) Wezuv válasza c27 hozzászólására (») Jan 2, 2017 /
 
Kapcsolj ki minden optimalizációt a fordítónál.
(#) c27 hozzászólása Jan 5, 2017 /
 
Sziasztok!
Le szeretném fagyasztani a picet, hogy lehet olyan programrészletet beszúrni, hogy ez bekövetkezzen? Ki akarom próbálni élesben is a watchdogot, de eddig nem sikerült annyira összekevernem valamit, hogy lefagyjon a pic. Mit kellene csinálnom?
(#) killbill válasza c27 hozzászólására (») Jan 5, 2017 /
 
Idézet:
„Mit kellene csinálnom?”
Probalkozhatsz hűtőspray-vel, de egy vegtelen ciklus is megteszi. C-ben:
  1. for(;;);
Assembly-ben egy jump, ami onmagara ugrik.
A hozzászólás módosítva: Jan 5, 2017
(#) c27 válasza killbill hozzászólására (») Jan 5, 2017 /
 
Ok, kösz.
(#) nemgyuri hozzászólása Jan 5, 2017 /
 
Szép napot! Nekem a C nyelv "Óhéber"...
Letöltöttem egy projektet az Aeropassionról -JEDICUT habvágó géphez. Elkészítettem az USB-LPT átalakítót, ami a teszt .HEX-el működik. A működtető program C-ben megvan, de a fordításkor a következő hibát adja:
Idézet:
„Executing: "E:\Program Files\Microchip\mplabc18\v3.47\bin\mcc18.exe" -p=18F4550 "usbdsc.c" -fo="usbdsc.o" -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
MPLAB C18 3.47 (evaluation)
Copyright 2000-2011 Microchip Technology Inc.
Days remaining until evaluation becomes feature limited: 60

WARNING: Running the compiler in extended mode will not be supported when the evaluation becomes feature limited.

G:\apa\PICKIT2\projekt\MM2001_usb_pro\usbdsc.c:280:Error [1218] extraneous initializer values
G:\apa\PICKIT2\projekt\MM2001_usb_pro\usbdsc.c:284:Warning [2054] suspicious pointer conversion
G:\apa\PICKIT2\projekt\MM2001_usb_pro\usbdsc.c:284:Warning [2054] suspicious pointer conversion
G:\apa\PICKIT2\projekt\MM2001_usb_pro\usbdsc.c:285:Warning [2054] suspicious pointer conversion
G:\apa\PICKIT2\projekt\MM2001_usb_pro\usbdsc.c:285:Warning [2054] suspicious pointer conversion
G:\apa\PICKIT2\projekt\MM2001_usb_pro\usbdsc.c:285:Warning [2054] suspicious pointer conversion
Halting build on first failure as requested.
----------------------------------------------------------------------
Release build of project `G:\apa\PICKIT2\projekt\MM2001_usb_pro\MM2001_pro.mcp' failed.
Language tool versions: mpasmwin.exe v5.54, mplink.exe v5.00, mcc18.exe v3.47, mplib.exe v5.00
Thu Jan 05 21:59:22 2017
----------------------------------------------------------------------
BUILD FAILED

A eredeti (Microchip honlapról letöltött) usbdsc.c file-be belerondítottam egy .pdf-ben megtalált VID és PID értéket. Az eredeti értékkel ugyanaz volt a hiba.

usbdsc.c
    
(#) nemgyuri hozzászólása Jan 5, 2017 /
 
Az előzőhöz csak annyit, hogy a 280-as sorban ez van:
Idézet:
„0xC0}; /* End Collection,End Collection */”
(#) Hp41C válasza nemgyuri hozzászólására (») Jan 6, 2017 /
 
A HID_RPT01_SIZE definíciója nem egyezik meg a megadott tömb méretével (63 byte).
(#) nemgyuri válasza Hp41C hozzászólására (») Jan 8, 2017 /
 
Köszönöm a segítséget! (Mint kiderült egy másik asbdsc.c file kellett hozzá.) Lefordítani sikerült, valami már megy, de még nem az igazi. Jó lenne érteni hozzá.
(#) don_peter hozzászólása Jan 18, 2017 /
 
Srácok 1 byte rotálására mi a legegyszerűbb megoldás?
Én most feltétellel oldottam meg, miszerint vizsgálom az első bitet és ennek megfelelően változtatom az utolsót.
pl:
  1. if(byte&0x01){ // ha az eredmény 1
  2.     rotalt = (byte>>1) | 0x80;
  3. }else{
  4.     rotalt = (byte>>1);
  5. }
Vagy
  1. rotalt = (byte&0x01) ? (byte>>1) | 0x80 : (byte>>1);

Van erre gyorsabb és egyszerűbb megoldás, C18 és C30-as fordítókra?
A hozzászólás módosítva: Jan 18, 2017
(#) Attila86 hozzászólása Jan 21, 2017 /
 
Itt is megkérdem, hátha:
Én rontok el valamit, vagy az atof() függvény működik rosszul?

atof hiba.png
    
(#) Istvanpisti válasza Attila86 hozzászólására (») Jan 21, 2017 /
 
Az atof() fv. double tipust ad vissza, nem tudom van-e ennek jelentősége.
(#) Attila86 válasza Istvanpisti hozzászólására (») Jan 21, 2017 /
 
Átírtam a típusát double-re de így is ez a végeredmény. Érdekes továbbá, hogy a Variables ablakban az "a"-nak a típusához továbbra is azt írja hogy float.
(#) Istvanpisti válasza Attila86 hozzászólására (») Jan 21, 2017 /
 
Ha az a, az double, akkor az sprintf format részébe próbálj %lf-et írni a %f helyett.
(#) cross51 válasza Attila86 hozzászólására (») Jan 21, 2017 /
 
Érdemes lenne megnézni nálad hány bites a float 24 vagy 32 és a double 32 vagy 64 próbálj beírni long double-t asszem az 16 és 32 biten a 64 bites (gépes) C double.
(#) Attila86 válasza cross51 hozzászólására (») Jan 22, 2017 /
 
Na kipróbáltam mindent amit lehetett de sehogy nem adott vissza normális értéket az atof(). Most már teljesen biztos vagyok benne hogy hibás a gyári atof() függvény! Írtam egy sajátot, az teljesen jól működik.
(#) Lamprologus hozzászólása Jan 28, 2017 /
 
  1. float a;
  2. int b=123;
  3.  
  4. a=b/10.0;
  5.  
  6. // a=(float)b/10;      // ugyan azt az ederményt adja


eredmény: 12,2........

Én az a-t csak az első tizedesig szeretném felhasználni, hogyan oldható meg hogy az 3-as legyen?
(#) Kovidivi válasza Lamprologus hozzászólására (») Jan 29, 2017 /
 
123-at 10-zel osztva hogyan lehetne 12.2...? Esetleg 12.30000 lehetne, más nem.
(#) benjami válasza Lamprologus hozzászólására (») Jan 29, 2017 /
 
Melyik fordító? Chip típus? Szimulátorban vagy valamin megjelenítve ennyi az eredmény?
Ennyi infóból: valami nem úgy működik, ahogy azt elképzeled.
(#) pipi válasza Lamprologus hozzászólására (») Jan 29, 2017 /
 
egész rész: b/10
"tizedes" rész: b%10 ez a modulo ha utána akarsz nézni
(#) Lamprologus válasza benjami hozzászólására (») Jan 30, 2017 /
 
PIC24FJ256GB106-os PIC-ről van szó ... CCS-C fordító ...
Soros potron küldöm ki az adatot egy Nextion kijelzőre, meg 4 bites módban egy 2x16-os LCD kijelzőre. Az LCD kijelzőn megjelenített érték, ha négy tizedest jelenitek meg akkor: 12,2999. A soros vonalon a Nextionon egy tizedes kiküldésével 12,2.
Még szimulátorban nem volt időm megnézni, hogy már az osztáskor bukik a mutatvány, vagy az fprint parancs környékén lesz a hiba.
(#) Lamprologus válasza pipi hozzászólására (») Jan 30, 2017 /
 
Köszi, de pont az lenne a lényeg, hogy az eredményt float-ban kapjam meg!
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 30, 2017 /
 
Ne csodálkozzunk a pontatlanságon, az 1/10 egy végtelen szakaszos "kettedes" tört...
A kiíratás előtt a pontossági igények figyelembe vételével kerekíteni kell.
(#) benjami válasza Lamprologus hozzászólására (») Jan 30, 2017 /
 
Akkor ez kerekítési hiba, a stringre alakító függvényed fixen lefelé kerekít. Ha egy tizedesre van szükséged, akkor a stringre átalakítás előtt adj hozzá 0.05-t.
A hozzászólás módosítva: Jan 30, 2017
(#) Wezuv hozzászólása Márc 26, 2017 /
 
Hogyan lehet jelezni a fordítónak, hogy hagyja ki az optimalizálásból az adott sorokat (Nop-okat) ?
Vagy, hogyan lehet úgy várakozni egy-két program lépést, hogy azt ne optimalizálja ki a fordító?
XC32
(#) Wezuv válasza Wezuv hozzászólására (») Márc 26, 2017 /
 
Találtam megoldást, igaz soronként, vagy egy kód részletre még nem tudom hogyan lehet alkalmazni, de egy eljárásra már működik:
  1. void __attribute__((optimize("-O0"))) WriteCommand_sub(uint16_t cmd)
(#) Kovidivi válasza Wezuv hozzászólására (») Márc 26, 2017 /
 
Deklaráld volatile-nek, és futtass egy for ciklust, amíg várni akarsz. Ekkor biztosan nem lesz kioptimalizálva a várakozásod.
Következő: »»   137 / 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