Fatalnie tłumacze to, co chce zrobić. Mam model samochodu RC. Ma bardzo dużo komend, którym nim sterują. Logika jest banalna z Waszego punktu widzenia. Zawsze testowałem na żywym modelu nowe zmiany. Jednak odkryłem, że przecież można testować niektóre funkcje bez uruchamianiu całego modelu. Odkrycie roku z mojej strony ;p Sąsiadka będzie mogła teraz spać spokojnie ... Mam problemy z #definami zawartymi w plikach nagłówkowych oraz z bibliotekami, które są znane tylko mikrokomputerowi <JB/xxxx>. #Define są przygotowane pod mikrokomputer, który mam zainstalowany w modelu. Testowanie chciałbym wykonywać na zwykłym PCcie. (Dwa różne kompilatory). Dlatego chciałbym mieć dwa pliki nagłówkowe: jeden dla mikrokomputera, drugi dla Pcta. Natomiast plik "lib_example.cpp" były dla nich wspólny. To akurat zrobić potrafię. Jednak mam problem z dowiązanie plików <JB/xxxx>.
Plik lib_example.h mam zależności do innych bibliotek, które nie są mi potrzebne mi do testowania komend, a powodują, że kod nie kompiluje się po stronie PCta. Dlatego mam stworzyć po stronie pcta, puste pliki <JB/io.h>, <JB/eeprom.h>, <JB/interrupt.h>, <JB/delay.h> z pustymi funkcjami aby oszukać kompilator? Tylko gdzie mam zainstalować te pliki aby kompilator je widział ? Nie chce ręcznie zmieniać <> na "". Ostre nawiasy oznaczają, że kompilator będzie szukał tych plików w jakieś domyślnej lokalizacji kompilatora, a nie w folderze gdzie mam napisany program ?
lib_motor_example.cpp
Kopiuj
#include "lib_example.h"
#include <iostream>
#include <string>
using namespace std;
string StartMotor()
{
string StartChar = "$#";
string EndChar = "$#";
string CmdMotor = MOTOR_FRONT_WHEELS + "/DIR:" + MOTOR_FW_DIR_ + "/GO";
return StartChar + CmdMotor + EndChar;
}
//takich funkcji mam mnostwo
// jednak czasem korzystaja z funkcji, ktore dotycza mikrokomputera, przyklad ponizej:
void SendMsg(string MSG)
{
SEND_COM = MSG;
JB_data_send(); // !!!!!!!!!!!!!!!!!1 <--- funkcja z <JB/io.h> !!!!!!!!!!!!!!!!!!!!!!!!!!!
}
motor.h
Kopiuj
#ifndef __lib_example_H
#define __lib_example_H
#include <JB/io.h> !!!!!!!!!!!!!!!!!1 <--- nie wiem jak sobie z tymi poradzic !!!!!!!!!!!!!!!!!1
#include <JB/eeprom.h> !!!!!!!!!!!!!!!!!1 <--- nie wiem jak sobie z tymi poradzic !!!!!!!!!!!!!!!!!1
#include <JB/interrupt.h> !!!!!!!!!!!!!!!!!1 <--- nie wiem jak sobie z tymi poradzic !!!!!!!!!!!!!!!!!1
#include <JB/delay.h> !!!!!!!!!!!!!!!!!1 <--- nie wiem jak sobie z tymi poradzic !!!!!!!!!!!!!!!!!1
#define PORT_NUM 7
#define PORT_NAME COM
#define PORT_CNTR PORT_NAME.BAUDCTRLB
#define SEND_COM PORT_CNTR.PORT_NUM.DATA
// (...)
#define MOTOR_FRONT_WHEELS M1
#define MOTOR_FW_DIR_ 1
#define MOTOR_FW_DIR_BACK 0
//(...)
// Mnostwo definow, ktore sa zwiazane ze sprzetem.
// Kompilator po stronie PC nie ma do nich dostepu do niektorych "definow",
// Kod sluzy do sterowania modelem autka na zdalne sterowanie, mikrokomputer JaguarBoard
#endif
Jak się pozbyć <JB/xxxx>, aby móc symulować kod ?:
Nawet gdy stworze nowy plik:
lib_example_PC.h, oraz folder JB z plikami: io.h, eeprom.h, interrupt.h, delay.h to kompilator zgłasza error.
Rozumiem, że to powinno wygląda jakoś tak:
src/
lib_example.h lib_example.cpp
test/
lib_example_PC.h
test/JG
io.h eeprom.h interrupt.h delay.h
i jakos zmusic kompilator aby zadzialal z plikiem example.cpp z folderu /src a reszte wziął z folderu test ? Tylko jak ustawic kompilator w taki sposob ? Musze stworzyc wlasny makefile ?
Ps. Pomysł aby testować tylko klasę B jest sensowny. Nie pomyślałem o tym. Jak działa klasa B, to szkoda tracić czas na testowanie klasy A. Testować ją tylko wtedy gdy będzie problem z klasą B. Genialne w swojej prostocie :) Dzięki za porady. Nawet pisząc tego posta powoli rozumiem o co w tym chodzi.