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

 
 
 
Reply to this topicStart new topic
AlexanderL
сообщение Mar 1 2009, 11:44
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 22-03-07
Пользователь №: 26 400



Здравствуйте коллеги!
Возникла необходимось организовать большой массив ( 512 байт) в памяти микроконтроллера 1886ВЕ3У (аналог ядра PIC17C756a). Банки этого контроллера разбиты по 224 байта (4 банка), использую компилятор С17 (MPLAB другой просьба не предлогать). Хотел сделать несколько массивов памяти 4х128байт или 8х64байта, только компилятор не может их разместить в памяти МК. В описании этого компилятора есть директива для линкера #pragma varlocate bank, только толкового описания для её применения нет. Помогите если кто сталкивался с таким клиническим случаем.
Go to the top of the page
 
+Quote Post
mitayd
сообщение Jan 6 2010, 09:58
Сообщение #2





Группа: Участник
Сообщений: 7
Регистрация: 6-02-06
Пользователь №: 14 050



Если ещё нужно можно попробовать как в C18 (MPLAB_C18_Users_Guide_51288j стр.62):

By default, MPLAB C18 assumes that an object will not cross a bank boundary. An
object that is larger than 256 bytes can be created, but the following steps are required
to create a multi-bank object:
1.The object must be allocated into its own section using the #pragma idata or
#pragma udata directive.
#pragma udata buffer_scn
static char buffer[0x180];
#pragma udata
2.Accesses to the object must be done via a pointer.
char * buf_ptr = &buffer[0];
...
// examples of use
buf_ptr[5] = 10;
if (buf_ptr[275] > 127)
...
3.A new region that spans multiple banks must be created in the linker script.
Linker script before modification:
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
Linker script after modification:
DATABANK NAME=big START=0x200 END=0x37F PROTECTED
DATABANK NAME=gpr3 START=0x380 END=0x3FF
4.The object’s section (created in Step #1) must be assigned into the new region
(created in Step #3). Add a SECTION directive to the linker script.
SECTION NAME=buffer_scn RAM=big
Go to the top of the page
 
+Quote Post
-=Sergei=-
сообщение Jan 11 2010, 06:14
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 26-10-04
Пользователь №: 985



Цитата(AlexanderL @ Mar 1 2009, 14:44) *
Здравствуйте коллеги!
Возникла необходимось организовать большой массив ( 512 байт) в памяти микроконтроллера 1886ВЕ3У (аналог ядра PIC17C756a). Банки этого контроллера разбиты по 224 байта (4 банка), использую компилятор С17 (MPLAB другой просьба не предлогать). Хотел сделать несколько массивов памяти 4х128байт или 8х64байта, только компилятор не может их разместить в памяти МК. В описании этого компилятора есть директива для линкера #pragma varlocate bank, только толкового описания для её применения нет. Помогите если кто сталкивался с таким клиническим случаем.


Предлагаю задать ваш, вопрос на форуме технической поддержки Миландра
http://forum.milandr.ru/index.php

В вашем случае правда будет рекомендовано перейти на компилятор СС7A (поставляемый Миландром, демоверсия доступна на сайте для скачивания, для многих задач ее более чем достаточно)
зато создать 4 массива можно будет сделать вот так, объявив их глобальными и задав явно адрес расположения.


char S1[128] @0x020;
char S2[128] @0x120;
char S3[128] @0x220;
char S4[128] @0x320;
Go to the top of the page
 
+Quote Post

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

 


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


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