|
Обращение к верхнему 1кб ОЗУ pic18f2550. Как? |
|
|
|
Mar 31 2008, 12:29
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 1-11-06
Пользователь №: 21 854

|
Привет! Забил 1 кб ОЗУ, теперь Hitech PICC ругается что нету ОЗУ. Но у ПИКа есть еще 1 кб. Как к нему обратиться из C? USB модуль отключен, в даташите сказано что это ОЗУ мне доступно. На асме не пробовал, но через регистр выбора банка вроде все понятно. А как быть с С? Ведь там просто описываешь массив и все. Си сам заботится о выборе банков. Спасибо за помощь!
|
|
|
|
|
Apr 1 2008, 05:46
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 1-11-06
Пользователь №: 21 854

|
глобально описаны char buf1[140],buf2[85]; char m_buffer[512]; ну и конечно остальные переменные. Компилятор выдает:
Error[000] : Can't find 0x32 words for psect param in segment RAM Error[000] : Can't find 0xC words (0xC withtotal) for psect bss in segment RAM
Если делаю размер m_buffer меньшим, то все прокатывает. Просто создаю в HT-PICC18 проект пустой. #include <pic18.h> #include <pic18f4550.h>
unsigned char i[1024];
void main(void) { int y; for(y=0;y<1023;y++) i[y]=9; }
Так все работает. 1 кб памяти использую. Но если я сделаю размер i 1025, то ошибка: Error[000] : Can't find 0x401 words for psect bigbss in segment BIGRAM
В связи с этим вопрос. как мне долезть до другого 1 кб? Именно на Си. В асме это делается регистром BSR, а тут то как то Си рулит без регистров.
|
|
|
|
|
Apr 1 2008, 08:26
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 1-11-06
Пользователь №: 21 854

|
никогда не подключал. Сейчас попробовал и не получилось. тоже самое пишет... Можно примерчик?
|
|
|
|
|
Apr 2 2008, 15:03
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
для пик18ф4523 объявлены два массива по 700 байт, + мелочь Data space: RAM used 7h ( 7) of 600h bytes ( 0.5%) BIGRAM used 5A2h ( 1442) of 600h bytes ( 93.9%) COMRAM used 42h ( 66) of 80h bytes ( 51.6%) NVRAM used 0h ( 0) of 100h bytes ( 0.0%) делаю чуть больше, не комплит с той же ошибкой. ситуация похожа, осюда выводы: судя по отчету область памяти под массивы BIGRAM полностью заполнена, но осталось еще столько же в области RAM. либо надо увеличить область BIGRAM либо положить массив в RAM. дальше вопросы мануалу. я с этим не сталкивался
сорри, ошибся, у меня всего 1,5кБ памяти, поэтому все работает  возможно проблема с компилятором. у меня 9,50пл3. в старых (и новых которые 9.60про) на эту тему были ошибки
|
|
|
|
|
Apr 3 2008, 15:03
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 1-11-06
Пользователь №: 21 854

|
Ну у меня все еще 8.35PL3 стоит. Искал сейчас и нигде не найду откуда скачать 9.50. Поможете? И еще можно пример кода описания массива и обращения к нему. Может что не так делаю? Например так могу? char a[1023]; char b[512];
void main(void) { a[1023]=10; b[510]=2; }
|
|
|
|
|
Apr 3 2008, 15:40
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
Цитата(Roman_V @ Apr 3 2008, 19:03)  Ну у меня все еще 8.35PL3 стоит. Искал сейчас и нигде не найду откуда скачать 9.50. Поможете? в нем как раз этот глюк присутствует, натыкался в свое время скачать можно здесь если есть доступ в свои либо гугль. в принципе могу почтой отправить Цитата(Roman_V @ Apr 3 2008, 19:03)  И еще можно пример кода описания массива и обращения к нему. Может что не так делаю? Например так могу? char a[1023]; char b[512];
void main(void) { a[1023]=10; b[510]=2; } в общем то неправильно, последний элемент массива будет а[1022] так как нумерация с нуля начинается, а так вы залазите в левую область памяти и какую переменную при этом испортите в реальном проекте большой вопрос. но компилятору пофиг, он это съест.
|
|
|
|
|
Apr 4 2008, 06:22
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 1-11-06
Пользователь №: 21 854

|
что то я замучался с этой фигней. прочитал об моей проблеме. рекомендуют разбивать прогу на модули. вот разбил. посмотрите плиз правильно или нет. Но все равно та же ошибка. MPlab 7.20. В проекте 2 файла: "temp5.c" и "p1.c". компилю- Can't find 0x6BC words for psect bigbss in segment BIGRAM Мне надо иметь два массива по 512 байт, 140 байт и 85 байт. Остальное это переменные всякие, но объемом не больше памяти. По поводу версии компилятора разные слухи. кто-то говорит что 9.50 хуже и старые проги будут не компиляться, кто-то наоборот. фиг знает. Мне бы отлаженый пример программки на основе моего примера с описанием ныжных мне массивов. Было бы здорово! P.S. уже правда для текущего проекта обошелся меньшей памятью, т.к. оптимизировал, но для будущего надо с FAT работать, а там бы иметь 2 массива по 512 байт неплохо. Спасибо!
|
|
|
|
|
Apr 4 2008, 07:45
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 1-12-05
Из: Иркутск
Пользователь №: 11 630

|
Цитата(Roman_V @ Apr 4 2008, 14:22)  что то я замучался с этой фигней. прочитал об моей проблеме. рекомендуют разбивать прогу на модули. вот разбил. посмотрите плиз правильно или нет. Но все равно та же ошибка. MPlab 7.20. В проекте 2 файла: "temp5.c" и "p1.c". компилю- Can't find 0x6BC words for psect bigbss in segment BIGRAM Мне надо иметь два массива по 512 байт, 140 байт и 85 байт. Остальное это переменные всякие, но объемом не больше памяти. По поводу версии компилятора разные слухи. кто-то говорит что 9.50 хуже и старые проги будут не компиляться, кто-то наоборот. фиг знает. Мне бы отлаженый пример программки на основе моего примера с описанием ныжных мне массивов. Было бы здорово! P.S. уже правда для текущего проекта обошелся меньшей памятью, т.к. оптимизировал, но для будущего надо с FAT работать, а там бы иметь 2 массива по 512 байт неплохо. Спасибо! Нужно сделать так: Бъем прогу на 3 модуля: temp5.c : Код #include <pic18.h> //#include <pic18f4550.h> <<--- это совсем ненужно
void MyProc(void);
unsigned char i[700]; extern char m1[512],m2[512]; //прописываем внешние массивы
void main(void){ int y; for(y=0;y<700;y++) i[y]=9; MyProc(); }
void MyProc(void){ int i; for(i=0;i<512;i++){ m1[i]=2; m2[i]=3; } return; } И еще 2 файла: file1.c : Код char m1[512]; void func1(void){} // Необходимо объявить хотябы одну фиктивную функию file2.c : Код char m2[512]; void func2(void){} // Необходимо объявить хотябы одну фиктивную функию Так должно работать!  Вот прочитайте: http://www.htsoft.com/support/faq.html#faq97
|
|
|
|
|
Apr 4 2008, 08:01
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 5-12-05
Из: Москва, Россия
Пользователь №: 11 818

|
Цитата(Илья @ Apr 4 2008, 11:45)  Спасибо за ссылку. Действительно, надо хоть иногда читать документацию. Вот там еще пишут: Non-near variables that are not placed into the bss or data psects are placed in the bigbss and bigdata psects. Значит ли это, что если объявить переменную far, то можно уже не заботиться о длинах массивов и разбиении на модули, потому что линкер будет ее совать в какой-то bigbss (или bigdata)?
|
|
|
|
|
Apr 4 2008, 09:46
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 1-12-05
Из: Иркутск
Пользователь №: 11 630

|
Цитата(Галстук @ Apr 4 2008, 16:01)  Значит ли это, что если объявить переменную far, то можно уже не заботиться о длинах массивов и разбиении на модули, потому что линкер будет ее совать в какой-то bigbss (или bigdata)? Проверять надо... Кстати сейчас специально открыл проект, в котором, в свое время сталкивался с такой проблемой, вернул все объявления в один файл. и компилятор не сругался!!!  Все откомпилировалось нормально.... P.S. пробывал на PICC18 9.50 PL3
|
|
|
|
|
Apr 4 2008, 09:55
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 1-11-06
Пользователь №: 21 854

|
Спасибо за подробности! Но я попробовал и не работает: Error[000] : Can't find 0x6BC words for psect bigbss in segment BIGRAM BUILD FAILED: Fri Apr 04 13:56:02 2008
Файлы сделал как вы мне дали. Включил их в проект MPLab как Source Files. Может и правда от версии HT-PICC зависит. у меня 8.35 PL3
|
|
|
|
|
Apr 4 2008, 10:15
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 1-12-05
Из: Иркутск
Пользователь №: 11 630

|
Цитата(Roman_V @ Apr 4 2008, 17:55)  Спасибо за подробности! Но я попробовал и не работает: Error[000] : Can't find 0x6BC words for psect bigbss in segment BIGRAM BUILD FAILED: Fri Apr 04 13:56:02 2008
Файлы сделал как вы мне дали. Включил их в проект MPLab как Source Files. Может и правда от версии HT-PICC зависит. у меня 8.35 PL3 странно, всегда лечил таким образом - работало без проблем.
|
|
|
|
|
Apr 4 2008, 10:23
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 1-11-06
Пользователь №: 21 854

|
там блин пароль стоит. не пускает...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|