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

 
 
 
Reply to this topicStart new topic
> Как правильно создавать массивы больше 255 байт на MCC18
west329_
сообщение Jan 25 2011, 08:04
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Подскажите как такое правильно сделать.


Объявил массив

Код
#define BUFFER_SIZE_T     (333)
unsigned char buf_tun[BUFFER_SIZE_T];


на что компилятор мне ответил

Код
Error - section '.udata_hum.o' can not fit the section. Section '.udata_hum.o' length=0x00000150


поискал, понял что линковщик не может его разместить в памяти, контроллера, хотя на чипе 3.5 кб ОЗУ. чип ETH97J60

подскажите как быть
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 25 2011, 08:13
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(west329_ @ Jan 25 2011, 12:04) *
Подскажите как такое правильно сделать.


Объявил массив

Код
#define BUFFER_SIZE_T     (333)
unsigned char buf_tun[BUFFER_SIZE_T];


на что компилятор мне ответил

Код
Error - section '.udata_hum.o' can not fit the section. Section '.udata_hum.o' length=0x00000150


поискал, понял что линковщик не может его разместить в памяти, контроллера, хотя на чипе 3.5 кб ОЗУ. чип ETH97J60

подскажите как быть

Ну так посмотрите скрипт линкера и отредактируйте в нем размер секции. Или нет?
Go to the top of the page
 
+Quote Post
west329_
сообщение Jan 25 2011, 08:16
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Вот код используемого линковщика, буду признателен если ткнёте носом как правильно его отредактировать

Код
// File: 18f67j60_g.lkr
// Generic linker script for the PIC18F67J60 processor

#DEFINE _CODEEND _DEBUGCODESTART - 1
#DEFINE _CEND _CODEEND + _DEBUGCODELEN
#DEFINE _DATAEND _DEBUGDATASTART - 1
#DEFINE _DEND _DATAEND + _DEBUGDATALEN

LIBPATH .

#IFDEF _CRUNTIME
  #IFDEF _EXTENDEDMODE
    FILES c018i_e.o
    FILES clib_e.lib
    FILES p18f67j60_e.lib

  #ELSE
    FILES c018i.o
    FILES clib.lib
    FILES p18f67j60.lib
  #FI

#FI

#IFDEF _DEBUGCODESTART
  CODEPAGE   NAME=page       START=0x0               END=_CODEEND
  CODEPAGE   NAME=debug      START=_DEBUGCODESTART   END=_CEND        PROTECTED
#ELSE
  CODEPAGE   NAME=page       START=0x0               END=0x1FFF7
#FI

CODEPAGE   NAME=config     START=0x1FFF8           END=0x1FFFD        PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED

#IFDEF _EXTENDEDMODE
  DATABANK   NAME=gpre       START=0x0               END=0x5F
#ELSE
  ACCESSBANK NAME=accessram  START=0x0               END=0x5F
#FI

DATABANK   NAME=gpr0       START=0x60              END=0xFF
DATABANK   NAME=gpr1       START=0x100             END=0x1FF
DATABANK   NAME=gpr2       START=0x200             END=0x2FF
DATABANK   NAME=gpr3       START=0x300             END=0x3FF
DATABANK   NAME=gpr4       START=0x400             END=0x4FF
DATABANK   NAME=gpr5       START=0x500             END=0x5FF
DATABANK   NAME=gpr6       START=0x600             END=0x6FF
DATABANK   NAME=gpr7       START=0x700             END=0x7FF
DATABANK   NAME=gpr8       START=0x800             END=0x8FF
DATABANK   NAME=gpr9       START=0x900             END=0x9FF
DATABANK   NAME=gpr10      START=0xA00             END=0xAFF
DATABANK   NAME=gpr11      START=0xB00             END=0xBFF
DATABANK   NAME=gpr12      START=0xC00             END=0xCFF

#IFDEF _DEBUGDATASTART
  DATABANK   NAME=gpr13      START=0xD00             END=_DATAEND
  DATABANK   NAME=dbgspr     START=_DEBUGDATASTART   END=_DEND           PROTECTED
#ELSE //no debug
  DATABANK   NAME=gpr13      START=0xD00             END=0xDFF
#FI

DATABANK   NAME=gpr14      START=0xE00             END=0xE7F
DATABANK   NAME=sfr14      START=0xE80             END=0xEFF          PROTECTED
DATABANK   NAME=gpr15      START=0xF00             END=0xF5F
ACCESSBANK NAME=accesssfr  START=0xF60             END=0xFFF          PROTECTED

#IFDEF _CRUNTIME
  SECTION    NAME=CONFIG     ROM=config
  #IFDEF _DEBUGDATASTART
    STACK SIZE=0x100 RAM=gpr12
  #ELSE
    STACK SIZE=0x100 RAM=gpr13
  #FI
#FI
Go to the top of the page
 
+Quote Post
Vlad27
сообщение Jan 25 2011, 08:29
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



C18 C Compiler Getting Started -> FREQUENTLY ASKED QUESTIONS -> FAQ-10 How do I create a large object in data memory (> 256 bytes)?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 25 2011, 08:36
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Смещаем границы gpr* в скрипте, и добавляем свою секцию, например такая секция влезла между gpr1 и gpr2
Код
DATABANK   NAME=buffer_section    START=0x110          END=0x23F


Объявляем в тексте
Код
#pragma udata buffer_section
volatile char buffer[270];
#pragma udata
void main(void)
{
    for(;;);
}
Go to the top of the page
 
+Quote Post
west329_
сообщение Jan 25 2011, 10:22
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Благодарю за помощь
Go to the top of the page
 
+Quote Post

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

 


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


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