Easyelectronics.ru

Электроника для всех
Текущее время: 23 июл 2018, 07:23

Часовой пояс: 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
Сообщения: 29
.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 Кб | Просмотров: 1150 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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