Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 09:49:56

Пишу примитивную прогу в CCS_PCWHD компиляторе. Дописал до 25% памяти и все - пишет типа нехватка памяти и т.д. Подскажите как в программе написать чтобы пошло обращение к след странице? И потом в конце всей проги надо опять к первой возвращаться или он сам вернеться?

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:10:46

может, все-таки банки, а не страницы ??? :)
я совсем не знаю ццс, чтобы что-то толковое советовать, но попробуйте на какой-нить объемный массив в оперативке навесить не unsigned char array[] ,а bank1 unsigned char array[]
Компилятор распоряжается "автоматически" только 0 банком, остальные нужно подключать ручками.

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:15:37

мне не переменную туда надо писать а текст программы... У меня оператор switch на всю память 2к залазит с большим вложением. Вот мне надо чтобы прога пошла в 4к область памяти. Как это сделать?

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:31:34

Память программ на банки не делится, а делится память данных.

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:32:39

Была когда-то проблема с каким-то компилятором - если файл, скажем, main.c , занимает больше какого-то размера, компиляция не происходит. Лечилось разбиением на несколько файлов.
и 2-х килобайтовый свитч... это нечто...
размер функции желательно выбирать такой, чтобы она влезала в размер экрана. Если не влазит - бить на отдельные функции.
Отладка ускоряется и ошибок меньше.

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:33:32

Хорошо, память данных. Но от этого суть проблемы не меняется ))

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:35:25

разбивал функцию по 1му кейсу. Всего 8 кейсов в свиче. ничего

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:44:00

я предложить разбить файл на несколько, что тогда ?

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:45:31

никогда не разбивал. Как это правильно сделать? Создать несколько Си файлов, подключить к проекту и компилятор потом сам откомпилит?

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:46:09

Регистр PCLATH используется для адресации требуемой страници.
Им надо переключать страница.

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:47:54

как к этому регистру обращаться из моего компилятора? RA0 RA1 в этом регистре страницы переключает. Но как это записать?

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:55:46

Текст проги
main.txt
Текст программы...
(13.99 KiB) Скачиваний: 201

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 12:57:14

На асемблере так
BSF PCLATH,3 ; устанавливаем бит 3 в 1 выбор страницы 1 (800h-FFFh)
CALL метка ; переход на траницы 1 (800h-FFFh)
.
.
метка
.
RETURN ; назад

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 13:01:28

Переходы могу адресовать только 2к слов

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 13:16:31

я незнаю как в этом компиляторе напрямую к регистрам обратиться.... Может кто знает подскажите... В атмегах такой проблемы не встречал...((((((((

Re: Как в PIC 16f877 переключать страницы памяти?

Вт июн 12, 2012 13:25:09

Посмотрел код. Ну ужас.
Попробуйте воспользоваться массивами 4 байтных слов.

Re: Как в PIC 16f877 переключать страницы памяти?

Чт июн 14, 2012 00:14:52

miwutka07 писал(а):Пишу примитивную прогу в CCS_PCWHD компиляторе. Дописал до 25% памяти и все - пишет типа нехватка памяти и т.д. Подскажите как в программе написать чтобы пошло обращение к след странице? И потом в конце всей проги надо опять к первой возвращаться или он сам вернеться?

Здесь дело попахивает "палённым" компилятором, что-то вроде демо-версии или подобное.
В подобных случаях ограничен размер кода, обычно до 2К.
Нормальный компилятор всё сам должен "переключать" и вообще в ум не может прийти заниматься переключением страниц, если, конечно, это не вызвано какими-то другими соображениями.
Тема закрыта