Jump to content

direktīva #define


Jurkins
 Share

Recommended Posts

Laba diena visiem!

Jau sen gribēju šo pajautāt. Tiem, kas vēlas mācīt dzīvot, uzreiz piedāvāju neiespringt. Gūgles resursus esmu izskatījis, visticamāk ir kaut kāds sīkums, kas paskrien garām.

Tātad...Atmel Studio.

1. Fails si4432.h, kuram būs vajadzīgs util/delay.h, kurai būs vajadzīgs konstante F_CPU.

#ifndef SI4432_H_
#define SI4432_H_

#include <util/delay.h>
// ...tālāk nav svarīgi

"Galvenais" programmas fails main.cpp, kur konstante F_CPU tiek nodefinēta.

#define F_CPU 16000000UL

#include <avr/io.h>
#include <avr/sleep.h>
#include <util/atomic.h>
  
#include "si4432.h"
//... tālāk nav svarīgi

Kompilējot izdod "varningu" -  #warning "F_CPU not defined for <util/delay.h>. Pilna gūgle ar šo problēmu un risinājumiem, bet pa lielam visur problēma ir vai nu vispār aizmirsts nodefinēt F_CPU vai arī tas tiek darīts pēc util/delay.h "iekļaušanas" (nez kā latviski ir pareizi).  Šajā gadījumā F_CPU tiek nodefinēts pašā sākumā, pēc tam tikai tiek iekļauts si4432.h, kurš attiecīgi iekļauj to delay.h. Es visu laiku absolūti neiespringstu un iekš si4432.h pašā sākumā nodefinēju vēlreiz to F_CPU un viss strādā bez kļūdām. Bet gribas aizrakties līdz saknei. Kāpēc util/delay.h "redz" pirms/virs viņa definēto F_CPU, bet "neredz" pirms/virs si4432.h definēto F_CPU. Kā to programmu liek kopā?

It kā jau nav problēma, bet gribētos tomēr saprast, kur tas suns ir aprakts. Vakar pēcpusdienā tā sev galvu sajaucu ? ar šito, ka vairs neko nesapratu.

Paldies par atbildēm.

 

Link to comment
Share on other sites

Anonīms Alkoholiķis

Kristāla lode saka, ka palīdzības trūkumā vainojamā problēma slēpjas starp klaviatūru un krēslu. 

  • Slikti! 1
Link to comment
Share on other sites

Varbūt tapēc ka preprocesors sāk ar si4432.h un tad tiešām F_CPU nav definēts

 

Ja tu iepostotu te visu Make outputu, tad varētu domāt, bet savādāk tāda minēšana.

Labots - AndrisBB
Link to comment
Share on other sites

Droši vien ka ir arī tāds fails kā si4432.c ,kurā ir  #include si4432.h un kad tas fails tiek kompilēts, tad neviens par tāda F_CPU eksistenci nezin.

Labots - AndrisBB
Link to comment
Share on other sites

@AndrisBB, toč tā ir. Vo velns, biezpiens jāēd. Vienreiz taču  izmantojot "zinātniskās bakstīšanās metodi" jau "atklāju"?, ka, ja visu kodu ieraksta *.h failā, tad viss ir kārtībā. Es C/C++ apgūstu tā nesistematizēti un par pašu linkošanas/kompilēšanas procesu ir lieli robi zināšanās. Jā, iekš makefile tiešām papriekšu tiek "vilkts" si4432.c ... A man tas standarta pasaules uzskats, ka šis sāk no "main".

 

 

@Anonīms Alkoholiķis, brīdī, kad Tu raksti kaut ko asprātīgu, Zadornovs noteikti no skaudības zārkā griežas uz otriem sāniem?.

Labots - Jurkins
Link to comment
Share on other sites

Nu pa lielam var uzskatīt ka katrs .c fails ir kā atsevišķa programma kas tiek sakompilēta atsevišķi .o failos.

Parasti jau tā arī make faili tiek saraksti:

 

uz katru .c failu kompilējam .o failu

 

%.o : %.c 
   gcc -c $< -o $@ 

un tad kompilējam main.c un pielinkojam pārējos .o failus klāt

<gala programma> : <visi object faili>

         gcc main.c <visi object faili>  -o <gala programma>

 

Link to comment
Share on other sites

Baigi sen atpakaļ (pat neatceros vai uz w95 vai jau uz w98) mēģināju kaut ko darīt c, pat neatceros ar ko, komandrindā rakstīju kaut ko?... bet toreiz tā arī pagriezās viss uz citu pusi. Te jau tas Atmel Studio pats visu dara, praktiski defaultie uzstādījumi.

Būtībā skaidrs. Paldies!

p.s. rakstītu kā visi normālie Arduino, i nebūtu šitādu problēmu?.

Link to comment
Share on other sites

Paņem pats no komandrindas sakompilē un salinko, tad arī viss būs skaidrs.

Pēctam uzraksi meikfailu.

Link to comment
Share on other sites

Jā, laikam izglītošanās nolūkos tā arī darīšu. Vot vajag man urķēties?.

Labots - Jurkins
Link to comment
Share on other sites

Anonīms Alkoholiķis
pirms 2 stundām , AndrisBB teica:

Ja tu iepostotu te visu Make outputu, tad varētu domāt, bet savādāk tāda minēšana.

Es tak to pašu arī ierakstīju, tikai bez pilniem teikumiem. Tā ir, ja tautai blenžot uz kardašjāņiem un lasot visādu liberastu demagoģiju feisbūkā, ir atrofējusi smadzeni tik ļoti ka pat pēdējais muskulis vairs neceļas un spēja lasīt starp rindām pienāks tikai kad latvijā shēmotāji un diletanti vairs nebūš valdībā.

Labots - Anonīms Alkoholiķis
  • Kādas šausmas! 1
Link to comment
Share on other sites

Labi, miers?. Redz, es uzrakstu kaut ko nelielu asmā vai c kā nu protu , tas strādā un viss ir labi. Jā, modernais softs, sabojā cilvēkus - čik, čik un rezultāts. Kāda tur komandrinda, kāds makefile! Nu nesapratu patiešām Tavu smalko humoru?.

Link to comment
Share on other sites

Ko tu tur taisi ar to radio moduli?

 

Es kā reiz tagad ar vienu roku rakstu kodu priekš stm32 ar otru taisu PCB priekš LoRaWAN moduļa. Jāuztaisa kādus 20, lai būtu ar ko patestēt savu LoraWAN geitweju.

 

 

Uz vienas lielākas plates būs šis + stm32 mikrokontrolieris, jeb precizāk viņa ķīniešu klons (BluePill)

rfm95.png

Labots - AndrisBB
  • Patīk 1
Link to comment
Share on other sites

Zini, es esmu baigi haotisks savos hobijos. Ir beidzies gandrīz gadu ilgs pārtraukums manā c/c++ padarīšanā. Pagājušo pavasari vazājos pa rajonu ar vienu 4432, otrs stāvēja uz galda. Abiem tās standarta "antenas". Testēju, kā iet signāls. Mainīju modulācijas dziļumu, bitreitu.

Man ir dārzs ~800m pa taisni no dzīvokļa (4 stāvs). Biju iedomājies siltumnīcai visādus pribambasus pielikt un izmantojot šo moduļu pārīti vadīt to visu vai vismaz datus saņemt. Bet tādā attālumā man nekas nesanāca tomēr. Tiešā redzamība nav, bet nekas baigi augsts priekšā nav. Tāpēc biju salasījies krievus, ka cits pat 1500m pa tiešo dabūjis, domāju, ka sanāks. Bet nekā. Tagad atkal uznāca "lēkme" ?. Varbūt tomēr kaut ko ne tā biju salicis. Es jau reiz pasen elfaforumā rakstīju, ka šiem (ražotājam)  ir ekseļa workbooks, kurā var sarēķināt reģistrus, un tajā ir vismaz viena kļūda. Bet tā kā tā mikrene ir diezgan veca, tad tas nevienu īpaši neinteresē. Tagad jāpamēģina vēlreiz. Jā, un man arī aizvakar atnāca no Ķīnas pārītis "loru", bet tiem vēl neesmu pieķēries. Cik saprotu, šim ir algoritms ar optimālo filtrāciju (vismaz tā to sauca reiz senos laikos, kad taisījām laboratorijas darbu uz KP580IK80A "koferīša"), tāpēc var dabūt derīgo signālu ārā pat tad, ja trokšnu līmenis šo krietni pārsniedz. Jā, un nevaru saņemties pārlekt no 328-tās Atmegas uz tādu pašu STM modulīti kā tavējais. Cena vienkārši iespārda. Lētāks par Arduino Nano vai Mini.

Labots - Jurkins
Link to comment
Share on other sites

 

Pirms 41 minūtēm , Jurkins teica:

ā, un man arī aizvakar atnāca no Ķīnas pārītis "loru", bet tiem vēl neesmu pieķēries

Nepareizo Loru esi nopircis, Eiropai pa lielam ir 863Mhz. 

 

Pirms 41 minūtēm , Jurkins teica:

Jā, un nevaru saņemties pārlekt no 328-tās Atmegas uz tādu pašu STM modulīti kā tavējais. Cena vienkārši iespārda

Arī tas ka 10x vairāk jaudas un atmiņas, kā arī normāli var debugot.

 

Šito moduli taisu lai būtu tieši tādā pašā platumā kā tas ķīniešu stm32. Varēja jau visu salikt uz viena pcb, varbūt pat sanāktu lētāk un kompaktāk, bet slinkums. Rīt jāuztaisa pamat PCB, kurā iesplaust šos abus, kautkādu i2c eepromu, kur saglabāt addresi un konektorus priekš barošanas.

Labots - AndrisBB
Link to comment
Share on other sites

Pirms 16 minūtēm , AndrisBB teica:

Nepareizo Loru esi nopircis, Eiropai pa lielam ir 863Mhz

Eiropā atļauta ir arī 433MHz frekvence. Jo zemāka frekvence, jo tālāk velk.

Labots - Didzis
Link to comment
Share on other sites

Atļauta ir, bet pēc maniem novērojumiem lielākā daļa geitveju ir 863mhz (ja plānots ir tādu izmantot). Ja sūta datus starp diviem moduļiem, tad der jau arī tas 433mhz.

Link to comment
Share on other sites

Nu man pagaidām no moduļa uz moduli. Par tiem geitvejiem esmu palasījis, bet neesmu tā īsti iedziļinājies.

Link to comment
Share on other sites

Es kāreiz geitveju taisu. Softwares rakstīšana aizņem diezgan daudz laika, plus pēc darba nogurums un slinkums. Pēc darba varu tikai tādus nebūtiskus mini pcb taisīt, kur īpaši nav jādomā, sava veida relaksēšanās. Tapēc pie geitveja sanāk strādāt tik pa brīvdienam, un arī tikai tad, ja nav nekā interesantāka ko darīt. Ganjau esi ievērojis manu geitveja topiku.

Labots - AndrisBB
Link to comment
Share on other sites

Nu jā, manām programmista spējām uz šo brīdi tas ir diezgan liels kosmoss. Es atkal, kamēr iestājās aukstums, brīvajos brīžos ņēmos ar CNC. Tagad garāžā palika pārāk auksti, mācos atkal? programmēt. Īstenībā, nevar tā atlaist.

Link to comment
Share on other sites

pirms 6 stundām , AndrisBB teica:

Paņem pats no komandrindas sakompilē un salinko, tad arī viss būs skaidrs.

Pēctam uzraksi meikfailu.

Kāda vēl tev make failu rakstīšana, izmantojot Atmel Studio reizi gadā... :)

 

Autoram - to F_CPU gan labāk izņem no failiem un nodefinē projekta līmenī (project properties vai kā nu tur bija).

Link to comment
Share on other sites

pirms 2 stundām , binary teica:

Kāda vēl tev make failu rakstīšana, izmantojot Atmel Studio reizi gadā...

Nu man patīk urķēties?, nu ko tur lai dara.

@binary! Pateiciens! Nemācēju gūglei pareizi paprasīt.

Link to comment
Share on other sites

pirms 6 stundām , binary teica:

Kāda vēl tev make failu rakstīšana, izmantojot Atmel Studio reizi gadā... :)

Izglitosanas nolukos, bez Atmel Studio, vienkarsi pats salasi vajadzigos failus, nav jau vinju tur tik daudz un uzraksti meikfailu.

Savadak dzivojot tikai IDE realitate daudziem liekas ka programma sakas no main funkcijas, kautvai svarigas lietas tiek izdaritas pirms tiek l'idz main, lai dab'utu to mikrokontrolieri vispar pie dzivibas.

Labots - AndrisBB
  • Patīk 1
  • Atbalstu 1
Link to comment
Share on other sites

AndrisBB, esi skatījies uz esp32? Šis ir perfekts un lēts mikro kontrolieris fanātiem kas vēlas uzlabot savas C/C++ prasmes. Priekš tādiem kā ir arī iespēja darbināt uz diētas uzlikty Python pa tiešo uz paša kontroliera.

Link to comment
Share on other sites

Man ir vairaki esp32. Ja kautko ar vinjiem daru, tad parasti izmantoju Python. Ir Micropython, Zerynth, PyCom. Katram savi plusi un minusi.

Esu ari kombinejis C ar Python. Butiba noder ja vajag fiksi uztaisit kautko, kur vajadzigs WiFi un citas lietas nav svarigas. Bet ta parasti prieks WiFi izmantoju TI CC3200 vai kko tamlidzigu. 

Link to comment
Share on other sites

pirms 8 stundām , AndrisBB teica:

Izglitosanas nolukos, (..)

Izglītošanās nolūkos to visu var arī uz scons uzstutēt, kodu sagāzt kādā gitā un piejūgt pie jenkins, lai nebūtu pašam ar rociņām jākompilē. Tik nez vai šajā gadījumā tas jelkādā veidā palīdzēs sasniegt izglītošanās mērķi. Kāds nu tur bija tas mērķis … dabūt datus no siltumnīcas?

 

Urķēties, protams, ir labi, bet, kā saka, iedvesma nav siļķe, kuru var iesālīt uz daudziem gadiem. Ja reiz ir iedvesma reizi gadā paurķēties pa kodu, tad urķēšanās pa meikfailiem var "novirzīt no kursa".

  • Patīk 1
Link to comment
Share on other sites

Katram savas intereses. Kādam varbūt ir interesanti vienkārši tikt līdz tam ka kods kompilējas, izpētīt kādi ir kompilatora flagi, ko tas maina utt. Interesē pats process neviss rezultāts, tapēc teikt ka makefaili nav interesanti ir mulķīgi, kādam varbūt interesē.


Raimondam piemēram interesantas likās bitu operācijas :D


Man piemēram pilnīgi neinteresanti liekas kautkādi jenkinsi utml, tapēc jau nesaku ka bezjēdzīgi nomests laiks čakarējoties ar tādiem.

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...