Непонятная работа препроцессора
- Войдите на сайт для отправки комментариев
Пт, 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
Ну, вот, видите, что arduino.h включён ПОСЛЕ Вашего файла. Теперь Вас не удивляет, что OCR1A в Вашем файле не определён?
Включайте в Ваши include файлы arduino.h и всё будет определено