реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> KEIL и Code Banking, Нужна помощь, советы
one_man_show
сообщение Dec 22 2004, 07:04
Сообщение #1


Помогу, чем смогу
******

Группа: Админы
Сообщений: 2 786
Регистрация: 28-05-04
Из: Москва
Пользователь №: 25



При работе с машинкой, у которой ПЗУ 128К, столкнулся с необходимостью управления переключением банков памяти. Работал в TASKING EDE, там поддержка есть на уровне безошибочной компиляции и линковки, а само переключение делаешь "руками", среда не понимает особенностей и регистров выбранного процессора, в моем случае Cygnal C8051F123. Вынужден был перейти на KEIL, как более подходящий под эти машинки. Сказано, что Code Banking поддерживается, на то есть работающие примеры, но везде таблицы данных слишком малы и в основном демонстрируется переключение банков для вызова функций. Все действительно работает.

Моя проблема. В проекте таблица 64КБ и код 4КБ. Идеология Code Banking у Cygnal предполагает четыре банка по 32К. Разбил таблицу на три части, чтобы положить в три банка, создав для этого три файла и каждому указал, в каком банке ему жить.

Начались первые заморочки с Кейлом: не принимает одним куском всю таблицу, говорит SPECIAL INITIALIZER EXCEED 8K. То есть нельзя использовать инициированные массивы более 8КБ, почему? Ладно разбил каждую таблицу на три части так, чтобы каждая вышла не более 8К. Тепереь говорит ADDRESS SPACE OVERFLOW. То есть совсем не понимает, что я хочу положить таблицы в разные банки и постоянно старается хотя бы одну засунуть в банк COMMON, что мне совсем не нужно.

Может быть кто-то хорошо знающий Кейл подскажет как быть.
Что имеем: четыре файла с исходниками, первый содержит main (назначен банк COMMON), остальные содержат таблицы данных, каждая по 7280 char элементов, по три таблицы в каждом файле (каждой назначен свой банк с 1 по 3). В каждом файле функция для обращения к своей таблице. В проект включены два ассемблерных файла, стартовый и для управления банками. В проекте включаю поддержку Code Banking, выбираю 4 банка, назначаю Bank Area 0x8000-0xFFFF.
Модель SMALL, так как пока ОЗУ не пользуюсь.
Таблицы объявлены так:
char code tab1[7280] = {...данные...}, чтобы попали в область кода, а не XDATA.
Ругается на один из файлов с таблицами: ADDRESS SPACE OVERFLOW

Что не так сделал?


--------------------
С уважением,
Ваган Саруханов
Проекты|Форум|Facebook|Linkedin
Go to the top of the page
 
+Quote Post
one_man_show
сообщение Dec 22 2004, 11:41
Сообщение #2


Помогу, чем смогу
******

Группа: Админы
Сообщений: 2 786
Регистрация: 28-05-04
Из: Москва
Пользователь №: 25



Почитав ряд форумов, удалось разобраться.
Оказывается, чтобы банковать данные, нужно в опциях "BL Misc", в поле "Misc controls" указать:
BANK1(?CO?имя_модуля1)
BANK2(?CO?имя_модуля2)
BANK3(?CO?имя_модуля3)

Надо же было до этого додуматься. Ни в одном апликейшн ноутс ничего подобного нет, в хелпе нет, в описании на С51 и uVision тоже ничего нет.
Спрашивается, зачем все это нужно добавлять в опции, если в проекте явно для каждого файла задано, что их нужно разложить по разным банкам. Ответ нашел всего в одном посте на форуме Кейла: по умолчанию все настройки банков имеют эффект только относительно КОДА, а данных это не касается. Указанные установки привязывают сегмент ?CO (CONST) к разным банкам памяти.

А мне дурному казалось, что банки в большинстве применений задействуются в первую очередь под таблицы, а не под код. Это что же надо наворотить для 8-битного камня на 128К? В этом случае может быть лучше взять другой камень.


--------------------
С уважением,
Ваган Саруханов
Проекты|Форум|Facebook|Linkedin
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016