Непонятная работа препроцессора
- Войдите на сайт для отправки комментариев
Пт, 19/05/2017 - 16:37
Программа №1 компилируется без ошибок
//#include "APPEND2.h"
void test_function(void);
void test_function(void){OCR2A=150;}
// если включить файл "APPEND2.h" не в конце , а в начале
// компилятор не знает что такое имя регистра
//APPEND2.h:2: error: 'OCR2A' was not declared in this scope
void test_function(void); // прототип здесь обязателен, #include c прототипом не действует
void setup(void) { test_function(); }
void loop(void) {}
Переносим из программы две строки в файл APPEND2.H и включаем этот файл через #include "APPEND2.H"
Компилятор перестает узнавать имя "OCR2A"
#include "APPEND2.h"
// если включить файл "APPEND2.h" не в конце , а в начале
// компилятор не знает что такое имя регистра
//APPEND2.h:2: error: 'OCR2A' was not declared in this scope
void test_function(void); // прототип здесь обязателен, #include c прототипом не действует
void setup(void) { test_function(); }
void loop(void) {}
Содержание файла APPEND2.H:
void test_function(void);
void test_function(void){OCR2A=150;}
Почему происходят такие препроцессорные "чудеса" ?
Посмотрите, что на самом деле достаётся компилятору после предварительной обработки Вашего текста IDE - всё поймёте :)
Как посмотреть результат работы препроцесора в IDE Arduino ?
Зависит от версии IDE.
В любом случае Вам нужно найти папку, куда он складывает временные файлы. там есть файл. <название_скетча>.ino.cpp Вот это он и есть.
Как найти папку с временными файлами ... по Вашим постам мне кажется, что Вы не вчера программировать начали - найдёте. Если проблема, то говорите версию IDE.
версия 1.0.5-r2
(попытка мастерить к ней костыли здесь http://arduino.ru/forum/programmirovanie/nebolshie-kostyli-dlya-ide-duino-proshu-kritikovat-i-predlagat-bolee-udobnye )
нашел файл *.cpp
#line 1 "TEST2.ino" #include "APPEND2.h" //void test_function(void); //void test_function(void){OCR2A=150;} // \u0435\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u0430\u0439\u043b "APPEND2.h" \u043d\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435 , \u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 // \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438\u043c\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 //APPEND2.h:2: error: 'OCR2A' was not declared in this scope #include "Arduino.h" void setup(void); void loop(void); #line 12 void test_function(void); // \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0437\u0434\u0435\u0441\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d, #include c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c \u043d\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 void setup(void) { test_function(); } void loop(void) {}Ну, вот, видите, что arduino.h включён ПОСЛЕ Вашего файла. Теперь Вас не удивляет, что OCR1A в Вашем файле не определён?
Включайте в Ваши include файлы arduino.h и всё будет определено