Никак не могу разобраться... В инструкции к компилятору чет не могу найти ответа... Может ткнете, где описано как правильно создавать пользовательские внешние функции в отдельном файле...
сейчас застрял на этапе (на примере все той же EEPROM) main.c ( #include "EE_polzovatel.h") >> EE_polzovatel.h (пустые void Eeprom_Write ();unsigned char Eeprom_Read();) >> EE_polzovatel.с (расписаны функции Eeprom_Write и Eeprom_Read).
В предыдущих проектах все функции описывал в одном файле, перед void main. Но жутко неудобно во всем этом разбираться, хочется систематизации...
_________________ Чтобы избавиться от всяких котов, лучше всего обзавестись своим собственным...
Попробовал запихнуть функции EEPROM прямо в заголовочный файл, а C-файл изъял из проекта. Работает и проект компилится... Почему так делать не рекомендуется?
_________________ Чтобы избавиться от всяких котов, лучше всего обзавестись своим собственным...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Препроцессор вставит тела функций во все модули (С-файлы) в которые этот хидер включён. Компилятор сгенерирует код функций в каждом модуле. И когда линкер будет собирать объектные файлы (полуфабрикаты) в исполняемый файл программы - ему не понравятся объекты с одинаковыми названиями - поскольку непонятно какую из Х одноименных функций разработчик хотел вызывать.
H-файл - интерфейс модуля. C-файл - модуль. В модуле пишем реализацию - тела функций, в интерфейсе объявляем публичные ресурсы модуля - прототипы функций и extern определения глобальных переменных модуля. Всё что не должно быть видно за пределами модуля закрываем static-ом - чтобы даже возможности не было обратиться. Чем меньше торчит из модуля наружу - тем крепче и спокойнее наш сон - т.е. сводим публично доступные ресурсы до абсолютного необходимого минимума.
PS: Интерфейс (H-файл) "огораживается", чтобы препроцессор не дублировал уже включённые объявления:
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Здравствуйте. Помогите новичку в MPLAB X. Установил среду, добавил компиляторы, создал проект на с++, пытаюсь скомпилировать пустышку. В ответ получаю Спойлерmake[2]: *** No rule to make target 'build/default/production/main.o', needed by 'dist/default/production/18f23k22.X.production.hex'. Stop. make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2 пробовал другой камень с другим компилятором (HI-TECH) сообщение тоже самое. P.S. Clean проекта делал, проект вообще чистый изначально.
У микрочипа С++ поддерживает только один единственный компилятор, это - XC32, под 32-ые PIC'и.
Тогда всё сходится. Экспериментировал с разными камнями, и как раз 32й компилятор мне собрал проект. Только что изменил С++ на С, и всё собралось в 18м компиляторе. Вот задница! А я люблю с классами играться. Ну ок, С так С.
Сам я классы не пытался впихнуть, но где то на данном форуме утверждали что классы не целесообразно использовать из-за того что памяти не много, целесообразнее использовать функции
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
Скажем так. Класс в С++, ничем не отличается от обычной Сишной структуры и его экземпляр занимает памяти ровно столько, сколько в ней объявлено переменных. А метод у класса - та же функция, только ещё неявно передаётся указатель на экземпляр класса. Так что, на счёт целесообразности, можно ещё поспорить... Одно лишнее маш. слово в памяти под указатель, против удобства использования.
Это не ошибки, а предупреждения о некорректном форматировании исходника. Команды и директивы пишите, отступая на один таб от края. Метки оставьте вплотную к краю.
Ошибка только одна, в конце end должна быть БЕЗ точки.
Добавлено after 5 minutes 50 seconds: P.S. Разве в асм ставится ; после команды? Вроде нет.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Доброго времени суток. MPLAB 8.92. После создания проекта, при создании нового асм-файла, предлагает на выбор 2 вида кодировки, ANSI и Unicode. По умолчанию выбрана ANSI, всегда не думая ее оставлял. В каких случаях может понадобится Unicode ?
Доброго времени суток. Пишу простую менюшку на ассемблере. Хочу для красоты и автоматизации завернуть все в макросы. Есть следующая последовательность констант: Спойлер
Ну суть важно, что они все одинаковые, это просто набросок количества подпунктов в каждом пункте меню. Они могут быть произвольно изменены перед компиляцией. Необходимо создать таблицу возврата этих значений. Соорудил я значит следующий макрос: Спойлер
Код:
retlw_num_of_submenu_punkts macro ; Макрос, автоматически создаст таблицу возвратов количества пунктов в нужном подменю local a=1 while a<NUM_OF_MAIN_MENU_PUNKTS+1 retlw NUM_OF_SUBMENU_#v(a)_PUNKTS a+=1 endw endm
retlw_num_of_submenu_punkts macro ; Макрос, автоматически создаст таблицу возвратов количества пунктов в нужном подменю local a=1 while a<NUM_OF_MAIN_MENU_PUNKTS+1 retlw NUM_OF_SUBMENU_PUNKTS_#v(a) a+=1 endw endm
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения