Jak wiadomo, by poprawnie działały makra __delay_ms() i __delay_us(), kompilator musi znać częstotliwość pracy wykorzystywanego przez nas układu. O prędkości pracy układu informujemy poprzez zdefiniowanie odpowiedniego makra lub we właściwościach projektu, co de facto również sprowadza się do zdefiniowania makra. Najpierw sposób pierwszy i łatwiejszy, ale obarczony pewną niedogodnością w przypadku pisania wieloplikowego projektu. Celowo pominąłem ustawienia bitów konfiguracyjnych, bo to nie ma dla nas w tej chwili znaczenia.
Kod: Zaznacz cały
#include <xc.h>
#include <stdint.h>
#include <stdbool.h>
#include "mpu_config.h"
#define _XTAL_FREQ 48000000UL
void main(void)
{
while(true)
{
}
}
Oprócz plików nagłówkowych i standardowego punktu wejścia widzimy zdefiniowane makro _XTAL_FREQ, które informuje kompilator, że nasz układ taktowany jest sygnałem o częstotliwości 48MHz. Jest to sposób najprostszy i najszybszy, ale jeśli stworzymy sobie kilka plików i w każdym z nich będziemy mieli zdefiniowane takie makro (bo pliki te są np. naszymi libsami pisanymi kiedyś tam... i wtedy było nam potrzebne makro _XTAL_FREQ), kompilator "strzeli fochem" i poinformuje nas, że nastąpiła redefinicja makra _XTAL_FREQ. Ok, w porządku...jest na to sposób:
Kod: Zaznacz cały
#include <xc.h>
#include <stdint.h>
#include <stdbool.h>
#include "mpu_config.h"
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 48000000UL
#endif
void main(void)
{
while(true)
{
}
}
Jak widać zabezpieczyliśmy się przed wielokrotnym definiowaniem makra _XTAL_FREQ poprzez sprawdzenie, czy już jest zdefiniowane. Jeśli tak, kolejna definicja nie zostanie zrealizowana. Niestety i tutaj mogą się pojawić problemy z widocznością tego makra w innych plikach projektu i trzeba będzie kombinować, inkludować jakiś inny plik stworzony specjalnie na jakieś "globalne makra" itp.
Drugim i lepszym sposobem jest ustalenie prędkości pracy układu wprost we właściwościach projektu. W oknie z drzewem projektu klikamy na jego nazwę prawym klawiszem myszy i wybieramy Properties.
Następnie, w nowym okienku, klikamy w xc compiler. Zerkamy na prawą stronę okna, by w tabelce dostrzec wiersz o nazwie Define macros. Klikamy w wiersz, by otwarło się kolejne okienko.
Wpisujemy _XTAL_FREQ=48000000UL i od tej pory w całym naszym projekcie będzie dostępne to makro bez żadnych kombinacji alpejskich
Pozdrawiam!