|
Заголовочные файлы и модули., Как правильно? |
|
|
|
 |
Ответов
|
Jan 1 2018, 18:47
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(Smoky @ Jan 1 2018, 07:55)  Разобрав несколько примеров сделал попытку переделать один из своих проектов, разделив свои заголовочные файлы на .c и .h. Как только я это сделал с одним файлом компилятор сразу же "потерял" функции в других заголовочных файлах, которые я не изменял. Переделка только одного файла может только запутать все эти перекрестные ссылки. Нужно переделывать все. Обычно это довольно трудоемко. У меня есть опыт перенятия чужих проектов начинающих программистов, которые плохо понимали структуризацию проектов на Си. На "распутывание" проекта из ~20 файлов уходила пара дней  Там еще будут проблемы грамотного ограничения области видимости переменных и функций, но это вам можно оставить на потом, после вникания в это. Цитата(Smoky @ Jan 1 2018, 16:54)  Логику использования .h файлов я понял, я не уловил в примерах закономерности директив #include в модулях .c Для начала, все .с файлы должны быть включены в проект в самой IDE AVRStudio Там должно быть окно с деревом файлов проекта. Файлы обычно включаются командой типа: Add file to project С инклудами .h файлов все просто. Запускаете компиляцию проекта. Например на файл main.c компилятор ругается, что не может найти функцию func(). Вы поиском находите, что эта функция у вас находится в файле uart.c, а в файле uart.h есть описание её прототипа. Значит, в начало файла main.c нужно добавить #include uart.h И так по всем ошибкам компилятора. С Новым Годом!
|
|
|
|
|
Jan 1 2018, 19:40
|

Местный
  
Группа: Свой
Сообщений: 401
Регистрация: 7-05-10
Из: Оренбург
Пользователь №: 57 135

|
Цитата(Baser @ Jan 2 2018, 00:47)  Переделка только одного файла может только запутать все эти перекрестные ссылки. Нужно переделывать все. Обычно это довольно трудоемко. Согласен. Поэтому решил начать сначала. Прошу посмотреть фрагмент программы и сказать что я делаю не так. Этот фрагмент инициализирует LCD 1х20, загружает пользовательские символы, выводит на LCD "Инициализация" и короткий звуковой сигнал 10 мсек. Файлы .c компилируются нормально но вот сборка не получается. Директивы #include вставлял по мере вывода сообщений об ошибках но результата так и не получил...
--------------------
Лень, оттвори дверь, сгоришь - а хоть и сгорю, но не оттворю.
|
|
|
|
|
Jan 1 2018, 20:30
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(Smoky @ Jan 1 2018, 21:40)  Прошу посмотреть фрагмент программы и сказать что я делаю не так. Студии у меня нет, посмотрел глазами. С функциями уже хорошо. Но переменные объявляете не правильно. 1) Все объявления переменных, по которым компилятор выделяет память, должны находится в начале .c файлов. В .h файлах помещаются только разные макросы и определения. То есть, всякие: volatile word sign_clcdur=0; двигаем в .c файл. Если эта переменная используется только в нем, больше ничего не нужно. Если она применяется еще в других файлах, тогда в соответствующий .h добавляется: extern volatile word sign_clcdur; И этот .h файл включается через #include туда, где применяется. 2) Структуры объявляются через typedef в .h файлах typedef volatile struct //Структура индексов { bit level:1; //Индекс текущего уровня звукового порта bit waiting:1; //Индекс ожидания готовности к формированию звукового сигнала } insg_t; extern insg_t insg; Само определение структуры, по которому выделяется память и проводится инициализация, в .c файле: insg_t insg = {0,0}; 3) Порядок нескольких #include имеет значение, т.к. компилятор работает последовательно, он не знает определений, которые будут "ниже", "позже".
|
|
|
|
|
Jan 2 2018, 17:11
|

Местный
  
Группа: Свой
Сообщений: 401
Регистрация: 7-05-10
Из: Оренбург
Пользователь №: 57 135

|
Цитата(Baser @ Jan 2 2018, 02:30)  Студии у меня нет, посмотрел глазами. С функциями уже хорошо. Но переменные объявляете не правильно.
1) Все объявления переменных, по которым компилятор выделяет память, должны находится в начале .c файлов. В .h файлах помещаются только разные макросы и определения. Коллеги, вы "ломаете" все мои установки! Программировать начал с 2009 г. , оказалось что это лишь мои "вершки". Попробую всё сначала, спасибо за ценные советы. Предлагаю для анализа файл сообщений который выводит компилятор AVRStudio.
--------------------
Лень, оттвори дверь, сгоришь - а хоть и сгорю, но не оттворю.
|
|
|
|
Сообщений в этой теме
Smoky Заголовочные файлы и модули. Dec 30 2017, 17:11 sigmaN Думаю что эти функции потерял не компилятор, а лин... Dec 30 2017, 20:01 Smoky Цитата(sigmaN @ Dec 31 2017, 02:01) Думаю... Dec 31 2017, 06:39 Baser Пару раз встречал расположение функций в файлах .h... Dec 30 2017, 22:52 dxp Помещение определений встраиваемых функций (inline... Dec 31 2017, 10:21 gosha-z Цитата(dxp @ Dec 31 2017, 13:21) Помещени... Dec 31 2017, 12:54  Сергей Борщ QUOTE (gosha-z @ Dec 31 2017, 14:54)... Dec 31 2017, 16:33   gosha-z Цитата(Сергей Борщ @ Dec 31 2017, 19:33) ... Dec 31 2017, 19:00 Smoky Разобрав несколько примеров сделал попытку передел... Jan 1 2018, 05:55 HardEgor Цитата(Smoky @ Jan 1 2018, 12:55) Разобра... Jan 1 2018, 07:42  Smoky Цитата(HardEgor @ Jan 1 2018, 13:42) Лучш... Jan 1 2018, 07:55 sigmaN Так вы логики в .h файлах не видите потому не пони... Jan 1 2018, 12:45 nice_vladi Цитата(sigmaN @ Jan 1 2018, 12:45) ...
П... Jan 1 2018, 13:45 Smoky Цитата(sigmaN @ Jan 1 2018, 18:45) Так вы... Jan 1 2018, 14:54  sigmaN Цитата(Smoky @ Jan 1 2018, 17:54) Логику ... Jan 1 2018, 18:38    Baser Цитата(Smoky @ Jan 2 2018, 19:11) Предлаг... Jan 2 2018, 19:18 sigmaN Мне пришлось импортировать проект в AS 7
Я правил... Jan 1 2018, 20:01 Dog Pawlowa Цитата(sigmaN @ Jan 1 2018, 23:01) ...
Си... Jan 1 2018, 21:10 ArtemKAD В хидеры включены переменные(и константные перемен... Jan 1 2018, 20:10 sigmaN ЦитатаПервый способ создаст две переменных, ошибок... Jan 1 2018, 21:24 sigmaN ЦитатаКоллеги, вы "ломаете" все мои уста... Jan 2 2018, 21:30 Smoky Цитата(sigmaN @ Jan 3 2018, 03:30) Вам бы... Jan 3 2018, 08:00 Владивольт похожая тема - взгляните Jan 3 2018, 17:39 Smoky Моя благодарность "волхвам" за науку, вс... Jan 10 2018, 17:06 sigmaN Обращайтесь, я по умничать всегда рад Jan 10 2018, 18:44 Unfog Для исключения повторной компиляции содержимого h-... Jan 12 2018, 06:13 Smoky Цитата(Unfog @ Jan 12 2018, 12:13) Для ис... Jan 12 2018, 06:49  Grizzzly Цитата(Smoky @ Jan 12 2018, 09:49) А это ... Jan 12 2018, 07:04   Smoky Цитата(Grizzzly @ Jan 12 2018, 13:04) Ну ... Jan 12 2018, 10:49  Kabdim Цитата(Smoky @ Jan 12 2018, 09:49) А это ... Jan 12 2018, 08:21   Baser Цитата(Kabdim @ Jan 12 2018, 10:21) Насто... Jan 12 2018, 10:29   aiwa Цитата(Kabdim @ Jan 12 2018, 10:21) Насто... Jan 13 2018, 07:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|