Свежие обсуждения
Микроконтроллеры

Ликбез по С для микроконтроллеров PIC

1 39 64

Не смог разобраться, кто кого цитирует в предпоследнем сообщении Vladikas-а
Vladikas, это скорее всего дублирующиеся файлы. Просто в сгенерированном другие имена. Лучше какой-нибудь из них выкинуть. Я бы выкинул сгенерированный, но не знаю, отличаются ли по периферии процы 16F873 и 16F873А. Если не отличаются, то точно бы оставил 16F873.h.

Насчёт #device ADC=10 - надо его ставить как можно ближе к началу. Похоже по мере чтения инклюдов компилятор что-то в себе настраивает, и уже не может переключиться. Хотя это конечно не дело.

 

Сергей К: "не вся переферия моделируется, например АЦП"
А вот такая штука Data Monitor Control Interface. Движки и типа аналоговый сигнал. Не могу понять как это работает.
Ещё поковыряю сам. Но может кто уже расковырял?..
-----------------
AHTOXA: Не смог разобраться, кто кого цитирует в предпоследнем сообщении Vladikas-а
Да мы тут динамически обновляем свои посты Возможно уже окончательный вариант там

Хидеры все три разные. В одном байты, в другом биты, в третьем дефайны (и пара байтов, надо бы их оттуда удалить).
-------------------
См. пост ниже
Сергей К: Я на семинаре видел
Завидую... Почему всё интересное так далеко от нашего захолустья?..

 

Vladikas: Движки и типа аналоговый сигнал
Я на семинаре видел их применение. Там использовали внутрисхемную отладку и этими ползунками в реальном времени меняли значение заданного регистра в работающем кристале.

Сергей К: Error 71 "F:\Electronic\Display\PCLCD.c" Line 597(0,1): Out of ROM, A segment or the program is too large MAIN
отчасти решил проблему, расставив директиву #separate перед всеми функциями, кроме main. Надолго ли?

 

Сергей К: упоминание директивы #separate
А я так понял, что эта директива только стек позволяет не забивать... И ничего она больше не умеет.

 

С движками в MPLAB разобрался. Так что вопрос отпал.

 

Vladikas: А я так понял, что эта директива только стек позволяет не забивать
я так и не понял, что она делает (их справки), но мне помогло - пока компилятор подругому разбивает код и не пытается сделать большой кусок, который не влазит в один сегмент (из онлайн-справки я понял, что она разрешает размещать тело функции в нескольких сегментах памяти*).
____
*. У PIC16F877A из за 14-битной шины нет возможности адрессовать больше 2кбайт памяти программ, поэтому доступные 8к памяти разбивается на 4 сегмента.

 

Vladikas: Vladikas ◊
25 июля, 22:58
Сергей К: упоминание директивы #separate
А я так понял, что эта директива только стек позволяет не забивать... И ничего она больше не умеет.

С точностью до наоборот.
Экономит ROM ,насилуя стек.
Запрещает компилятору делать функцию inline(встраиваемой).

 

главное, что мне помогло
У меня размер кода уже вырос до 50% от общего объема памяти, но на нехватку памяти в сегменте перетал ругаться.
До этого делал другой проект, так много времени уходило на игры с разбиением функций, чтобы все поместилось.

 

А я угробил мплаб и си компилятор... Фиг знает что случилось, но ничего не работает. Дурацкий линукс........

 

Vladikas: А я угробил мплаб и си компилятор... Фиг знает что случилось, но ничего не работает. Дурацкий линукс........
Ты часом не в wine ставил?