Warning: Illegal string offset 'name' in [path]/includes/functions.php on line 6439
Atmelis un C -
+
1 2 3 4 ...

thread: Atmelis un C

  1. #11
    Senior Member
    Mar 2003
    Rīga
    840

    Tās apakšvītras ir daļa no funkciju nosaukuma. Ja nepatīk apakšvītras aizvieto ar kaut ko citu. Bet vispār tās ir prekompilatora direktīvas funkcijas, kas apvieno a,b,c stringus. Izskatās, ka abas ir nodefinētas tā, ka var lietot izsaukumā abus pierakstus ar vienu apakšvītru vai divām. Palasi google par preprocessor macros.

  2. #12
    Senior Member
    Nov 2009
    Jēkabpils
    2,055

    ēē, paldies, tad sanāk vienkārši, ka var lietot abas. To es sapratu, ka šīs apvieno stringus, tikai nesapratu, kāpēc divos piegājienos.

    edit:
    nu bet sekss ar to c ir labs ! Varu iedomāties, kāds ir ar cpp .
    Bet interesanti

  3. #13
    Senior Member
    Nov 2009
    Jēkabpils
    2,055

    Šodien piebāzu pie Nano 6 DS18... termometrus. Viens 1820 no Argusa un pieci 18B20 no suņhujčajiem. Iemaucu šiem visiem pieciem skračpadā konfigurācijas baitā 1F - mērījumi ar 12 bitu precizitāti. Spriežot pēc nolasītā skračpada viss ir ierakstījies, bet ha-ha-ha. Trīs jaunākie biti nulles. Nu cita rubiļņika takš šiem nav, ar kuru pārsēgt.

    Vot i tagad nesaprotu, ko tie suņhujčaji tur dara. Family Code pareizs, izmantotie un rezervētie biti skračpadā arī pareizie. Piem 18S20 nemaz nevar ierakstīt konfigurācijas bitu, šim tāda nav. Tā kā pārmarķēšana atkrīt.

    No otras puses - suns zina, ko ēdis. Dļa seļskoj mestnosķi ... Farnelī viens štuks maksā gandrīz trīs eiro + PVN, suņhujčaji 10 gab. pa ~5 USD. Kas zin, kā šiem ar precizitāti, be lietošanai ārpus atomelektrostacijām būs jau labi.

  4. #14
    Senior Member
    Nov 2009
    Jēkabpils
    2,055

    Šodien piemetu vienu metāla puļķī ieintegrētu termometru no cita pārdevēja. Family code 0x28, skračpada baiti pareizi, defaultā konfigurācijas baits 0x7F. Ierakstu 0x1F... un sūkā bračkiņ! Trīs jaunākie temperatūras biti kā nulles bija tā nulles arī palika. Nē, nu man jau it kā pietiek ar pusgrāda precizitāti, bet interesanti, ko tie suņhujčaji dara. Jebšu netaisnīgi apvainoju suņhujčajus, jo pats kaut kur nolohojos?

    Jā, un varbūt kādam noder sekojošais grābeklis.
    Sametu visas funkcijas OneWire.c un OneWire.h failos, uzkāpu uz dažiem citiem grābekļiem un beigās "undefined reference to" uz visām manām funkcijām. 3.14sos kā mazais ezītis... un tad pamainīju faila paplašinājumu uz *.cpp. Tas ir par Arduino IDE.
    Un vēl. Arduino IDE neredz globālos mainīgos,kuri ir definēti bibliotēkas failā.

  5. #15
    Senior Member
    Nov 2009
    Jēkabpils
    2,055

    Sveiciens sestdienā!
    Uzmetās kārtējā c iesācēja problēma.
    Uzrakstīju visas nepieciešamās darbības manipulācijām ar LCD 2*16 displeju. Tik tālu ir labi. Vienā failā viss strādā. Aiznesu visus #define un funkciju definīcijas uz *.h failu. Aiznesu visas funkcijas uz *.c failu. Galvenajā *.c failā ierakstu:

    #define F_CPU 8000000
    #include "LCD.h"
    ...bla, bla, bla...

    Un dabūju brīdinājumu, ka F_CPU nav definēts. To F_CPU vajag util/delay.h bibliotēkai, kura ir inklūdota manā LCD.h failā. Vai tiešām man jāraksta #define F_CPU 8000000 iekš LCD.h faila? Tas nav visai ērti. Bibliotēku (kaut paša taisītu) it kā vajadzētu atstāt tādu kā ir. Biju iedomājies, ka kompilators nolasīs šo galvenajā failā un sapratīs...

  6. #16
    Senior Member
    Mar 2011
    1,119

    Es uz Arduino ide biki vienkāršāk to daru - nekādu .cpp failu, bet visu raxtu .h failā un lieku "somiņā" pie pārējā koda. Tad arī viegli rediģēt pie vajadzības, jo viss vienuviet un atverot uzreiz redz visus manus .h failus. Man tur ir savi faili pinout.h, configuration.h, functions.h, hardware.h. Viss smuki pa plauktiņiem, ērti pārskatāms un rediģējams. Pat no citām bibliotekām cenšos tikai paņemt nepieciešamās funkcijas un salikt pie sevis lai būtu pārskatāmāk, jo citādi optimizējot kodu katru reizi jāpārrok visas svešās bibliotēkas, kamēr atrodi vajadzīgo.

  7. #17
    Senior Member
    Nov 2009
    Jēkabpils
    2,055

    Nu jā, ja F_CPU nodefinē iekš tās LCD.h, tad nav problēmu.
    A par to .c un .h es neesmu nemaz interesējies, kāpēc tā dara - kāpēc jādala divos failos. C sāku mācīties laikam jau no nepareizā gala
    Bet nu delay.h jau nebūtu vajadzības rediģēt. Tās funkcijas ir pietiekoši labas. Vajadzētu varēt tomēr kaut kā to F_CPU nodefinēt projekta galvenajā failā un nemaz neinteresēties par to, kas notiek iekšā bibliotēkās. Vismaz tā es to saprotu.

    edit: Problēma atrisināta. Bļin, vot tā iet, kad nemācās no pareizā gala. Biju sākumā nodefinējis (kaut kur noskatījies). Vot tā ir - nevajag visu tupa kopēt.
    #define F_CPU 8000000UL
    Laikam jau tie burti galā nozīmē U(nsigned)L(ong). Vot i šitā copy/paste iekšā. Kamēr viss bija vienā failā, tikmēr gāja. A bet tagad noņēmu to UL nost un viss štokos.

  8. #18
    Senior Member
    Sep 2006
    Riga
    3,053

    gan jau ka šādi vajag
    :
    include config.h
    
    include lib1.h
    include lib2.h
    include libN.h
    
    main()
    {
     // trollolo
    }
    attiecīgi ja ir fukkcijas no device/app atkarīgas
    piem. mana_super_liba.c, tad tad sākumā include config.h un viss notiekās (global level)

    libām attiecīgi ir klasiskās definicījas
    :
    if not defined _mana_super_liba
    define _mana_super_liba
    ...
    endif

  9. #19
    Senior Member
    Nov 2009
    Jēkabpils
    2,055

    Esmu galīgi sapinies. Pirmo reizi kompilējot izmet, ka F_CPU nav definēts. Nospiežu otrreiz kompilēt, un viss ok. Kontrolieris strādā.
    Rakstu tā.
    Iekš main.c sākumā definēju F_CPU un tad inklūdoju bibliotēku:

    #define F_CPU 8000000
    #include <LCD.h>

    savukārt iekš LCD.h ir rinda:

    #include <util/delay.h>

    Šis delay.h izmanto F_CPU. Netieku gudrs vai kaut kur ir feileris vai nē. Jo otro (u.t.t.) reizi kompilējot ne tikai kļūdas, bet arī warningi nerādās. Un kontrolieris strādā. Nu jā, un par to F_CPU met warningu nevis kļūdu.
    Un vēl netieku gudrs, kāpēc piem. iekš LCD.h raksta:

    #ifndef _LCD_H_
    #define _LCD_H_
    ...blabla...bla...
    #endif

    Kāpēc tās apakšējās svītras? Jebšu kaut kur ir jau nodefinēts, ka "_blablabla_H_" ir "blablabla.h"?

  10. #20
    Senior Member
    Sep 2006
    Riga
    3,053

    Tapec ari nekompilejas ja definicijas ir ieks .cpp. Visas def. Vajag ieks headeriem. Headeri nav domati programesanai un tie inkludojas pec nepieciesamibas,bet cpp kompilejas seciigi par .obj

    Apaksvitras ir domatas smukumam ieksejai lietosanai "tipa lai nejauktu ar global define"

+