Easyelectronics.ru

Электроника для всех
Текущее время: 28 май 2018, 02:21

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Проблемы с размещением переменных в памяти
СообщениеДобавлено: 28 дек 2017, 20:32 
Только пришел

Зарегистрирован: 29 сен 2011, 19:37
Сообщения: 21
Компилятор cosmic, процессор stm8s208s6, IDE - ST Visual Develop (SVTP).
В процессоре 6Кб RAM, так что один буфер на килобайт влезать обязан.
Собственно в в чем вопрос - как заставить линкер затолкать большую неинициализированную переменную в секцию .bss?
Код такого вида
Код:
uint8_t buffer[1024];

При компиляции вылезает ошибка
Код:
#error clnk Debug\level-gauge.lkf:1 segment .ubsct size overflow (782)

Ладно смотрим в скрипт линковки, там у нас
Код:
# Segment Zero Page:
+seg .bsct -b 0x0 -m 0x100 -n .bsct
+seg .ubsct -a .bsct -n .ubsct
+seg .bit -a .ubsct -n .bit -id
+seg .share -a .bit -n .share -is
# Segment Ram:
+seg .data -b 0x100 -m 0x1300 -n .data
+seg .bss -a .data -n .bss

Ага, видим секцию .ubsct, оно лежит в начале памяти и в блоке 256 байт.
Ну так какого хрена оно пытается впихнуть невпихуемое??? Ведь в секции .bss аж 4608 байт свободных есть.
Пробовал насильно запихнуть переменную в .bss
Код:
#pragma section (bss)
uint8_t buffer[1024];
#pragma section ()

ругается
Код:
x() section type conflict: bss


Подскажите как победить сию беду?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблемы с размещением переменных в памяти
СообщениеДобавлено: 28 дек 2017, 21:26 
Только пришел

Зарегистрирован: 14 ноя 2016, 11:48
Сообщения: 25
.bss секция для не инициализированных глобальных или статических переменных. Попробуй сделать массив статическим: static uint8_t buffer[1024];


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблемы с размещением переменных в памяти
СообщениеДобавлено: 28 дек 2017, 22:41 
Только пришел

Зарегистрирован: 29 сен 2011, 19:37
Сообщения: 21
forker писал(а):
static uint8_t buffer[1024];

Пробовал до написания поста.
Однако попробовал еще раз, результат
Код:
#error clnk Debug\level-gauge.lkf:1 segment .ubsct size overflow (782)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблемы с размещением переменных в памяти
СообщениеДобавлено: 28 дек 2017, 23:08 
Только пришел

Зарегистрирован: 29 сен 2011, 19:37
Сообщения: 21
Сам спросил, сам ответил.
Растащился я на gcc, который сам со всем разбирается и лишних препон для программиста не строит.
В общем модель сборки по-умолчанию, которая "Short Stack" выкидывает соответствующую ошибку.
Насколько я понял, в stm8 есть память, к которой доступ имеется при наличии 1 операнда в инструкции, это как-раз те 256 байт в начале ram, а есть память для доступа к которой в инструкции 2 операнда, соответственно она отрабатывает дольше.
Решение проблемы: если модель сборки с "Short Stack", перед объявлением надо добавить модификатор @near
Код:
@near uint8_t buffer[1024]

Либо в свойствах проекта на вкладке "C Compiler" в поле "Memory models" выбрать "Long Stack".


Вложения:
stvp_1.png
stvp_1.png [ 24.46 Кб | Просмотров: 1076 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблемы с размещением переменных в памяти
СообщениеДобавлено: 30 дек 2017, 17:23 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 940
Откуда: Ижевск
Markusha
"Решение проблемы: если модель сборки с "Short Stack", перед объявлением надо добавить модификатор @near"

как ты к этому пришёл ?

_________________
Attiny13aПо20р.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблемы с размещением переменных в памяти
СообщениеДобавлено: 30 дек 2017, 20:41 
Только пришел

Зарегистрирован: 29 сен 2011, 19:37
Сообщения: 21
selevo писал(а):
как ты к этому пришёл ?

Сделал наконец RTFM.
По началу то я опирался на документацию к gcc.
У космика на сайте есть инструкция по программированию в своей поделке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблемы с размещением переменных в памяти
СообщениеДобавлено: 31 дек 2017, 01:25 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 940
Откуда: Ижевск
ясно,да,интересно

_________________
Attiny13aПо20р.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB