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

 
 
 
Reply to this topicStart new topic
> uCOS-II под ATMEGA128. Ошибка "Error[e16]: Segment CSTACK...", Помогите разобраться плиз.
JeDay
сообщение Nov 30 2005, 20:27
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 276
Регистрация: 22-09-05
Из: Kiev
Пользователь №: 8 818



Использую uCOS-II под ATMEGA128.
Сначала, когда проэкт минимальный ошибки нет. После увеличения програмного кода компилятор выдает такую ошибку:
General options->Target->Configure system using dialogs (not in .xcl file) галочка убрана(когда стоит ОС не работает).

//----------------------------------------------------------------------------
Error[e16]: Segment CSTACK (size: 0x200 align: 0) is too long for segment definition. At least 0x6 more bytes needed. The problem
occurred while processing the segment placement command
"-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END", where at the moment of placement the available
memory ranges were "DATA:f06-10ff"
Reserved ranges relevant to this placement:
DATA:100-2c0 NEAR_I
DATA:2c1-ec5 NEAR_Z
DATA:ec6-f05 RSTACK
DATA:f06-10ff CSTACK
Total number of errors: 1
Total number of warnings: 0
//----------------------------------------------------------------------------

На сколько я понимаю не хватает ОЗУ для стеков. Когда галочку устанавливаю то этой ошибки нету. При выключеной галочке я не могу указать размер внешней памяти (окно General options->System не активно).

Подскажите кто знает:
1. С чем связана данная ошибка и как ее устранить ?
2. Возможно ли использование в данной ОС внешнего ОЗУ ?
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Dec 1 2005, 00:17
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Может это поможет?

Меню Project->Options->General Options вкладка Target

Установить Memory model = small

Дальше, перейти на вкладку System и установить необходимые размеры стеков CSTACK и RSTACK.

По крайней мере, мне это помогло, ошибка была такая же, только проект был не на ОС, а просто самостоятельная программа.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 1 2005, 07:35
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Либо внимательно почитав руководство по линкеру в плане опций *.xcl файла самому найти в последнем ошибку и вручную исправить.
Дело может быть в следующем.
Обычно стековые сегменты стоЯт в адресном пространстве ОЗУ последними и если им не хватило места, значит стоЯщие ранее сегменты его слишком много отхватили.
Делать надо следующее:
1. уменьшить таки размеры стеков (в специальных для этого константах *.xcl файла);
2. выявить неоправданно большие источники расхода ОЗУ (огромные массивы, особенно многомерные).
Попытаться собрать более простой проект - пусть сначала просто соберётся без ошибок и просмотреть файл *.map, выдаваемый линкером (эту опцию надо разрешить в настройках линкера) на предмет выяснения источников потребления памяти.
По мере усложнения проекта следить за потреблением памяти не допуская её дефицита. В случае возникновения последнего - перейти к использованию динамического выделения памяти, но это уже высший пилотаж.

Удачи.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 1 2005, 08:02
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Ещё кое-какие соображения.
У Вас сильно потребляется обнуляемый сегмент
Код
DATA:2c1-ec5 NEAR_Z
. Видимо это стеки процессов. Уменьшите их размеры. Лучше если они будут не просто одинаковыми, а по необходимости.
Второе - постарайтесь обойтись меньшим количеством процессов.
Третье - в случае применения ОС основные стеки системы RSTACK, CSTACK можно уменьшить, т. к. основная работа идёт в стеках процессов.
Последнее - внешнюю память применять можно, но:
- это медленнее, поэтому стеки процессов и основной стек надо держать во внутренней;
- придётся конфигуритровать *.xcl файл с учётом внешней памяти;
- придётся включить эту память в модуле __low_level_init() (файл low_level_init.c).
Go to the top of the page
 
+Quote Post
JeDay
сообщение Dec 1 2005, 13:50
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 276
Регистрация: 22-09-05
Из: Kiev
Пользователь №: 8 818



Спасибо.
Буду разбираться с линковочным файлом. Хотя в примере, который из потром идет *.xcl файл не используется.
Еще заметил вот такой спецефект:
Сначала работало 3 потока, ошибок не возникало. Потом после первой ошибки я размер стека уменьшил для всех потоков.
Теперь уже 2 потока, маленький размер стека, выключил громоздкие вложенные ф-и и все разно возникает ошибка sad.gif
Наверно компилятор без *.xcl файла выделяет ОЗУ произвольно, бо я вообще никакой зависимости не уловил.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 1 2005, 15:35
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Потребление памяти каждой единицей компиляции (файл *.c или *.cpp) до линкования можно увидеть в *.lst файлах (их создание надо разрешить в опциях компилятора).
В конце каждого такого файла есть суммарная информация.
Go to the top of the page
 
+Quote Post
dxp
сообщение Dec 2 2005, 06:11
Сообщение #7


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(IgorKossak @ Dec 1 2005, 21:35) *
Потребление памяти каждой единицей компиляции (файл *.c или *.cpp) до линкования можно увидеть в *.lst файлах (их создание надо разрешить в опциях компилятора).
В конце каждого такого файла есть суммарная информация.

Правда, размер кода в них не характеризует реальное потребление памяти программ, т.к. в .lst файлах приводится размер кода всего скомпиленного в файле, а в слинкованный файл включается только используемое.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 5 2005, 08:12
Сообщение #8


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Более того, стековая картинка не учитывает потребление стека вложенными функциями, скомпилированными не в текущем файле.
Go to the top of the page
 
+Quote Post

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

 


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


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