24.10.2015, 17:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Как в STM8S208 использовать весь объем памяти 128к?
Вопрос к знатокам IAR, STVD и других компиляторов.
Понадобился STM8 с очень большим объемом памяти. Выбрал STM8s208CB, у которого 128 килобайт. По расчетам этого должно хватить. Там текстов сообщений порядка 100 килобайт. Чтобы в остальное втиснуть код программы, пишу на асме. Так вот, на IARе наткнулся на ограничение объема - больше 32 килобайт не хочет компилировать! Хотя по всему никаких ограничений не должно быть. IAR ломаный. Пробовал уже разные версии, и 6.0, и 6.4, и 6.5. У всех одно и то же, более 32к не компилится. Пробовал на STVD, там тоже ограничение объема, хотя и вдвое выше - на 64к.
Какие есть варианты решения этой проблемы? Хочется верить, что IAR все же должен позволять работать с любым объемом, но для этого возможно есть какая-то настройка параметров проекта.
|
|
|
|
24.10.2015, 17:44
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,058
Сказал спасибо: 2,563
Сказали Спасибо 11,890 раз(а) в 5,964 сообщении(ях)
|
Re: Как в STM8S208 использовать весь объем памяти 128к?
Почитайте, как вариант можно применить. Хотя, конечно, приятней действовать напрямую.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
24.10.2015, 18:05
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Как в STM8S208 использовать весь объем памяти 128к?
Сообщение от Alex9797
|
Пробовал уже разные версии, и 6.0, и 6.4, и 6.5. У всех одно и то же, более 32к не компилится.
|
Хм! Прикольнее если получится!
Вы точно не путаете ИАР под АРМ с ИАРом под STM8? Или это был просто вброс?
Вот что кажет сам ИАР, официально:
Цитата:
|
Available Versions
Product: IAR Embedded Workbench for STMicroelectronics STM8
Version Release date LMS
2.10 Nov 18, 2014 LMS2
1.42 Jan 23, 2014 LMS2
1.41 Jul 4, 2013 LMS2
1.40 Mar 4, 2013 LMS2
1.31 Oct 4, 2012 LMS1
1.30 Apr 8, 2011 LMS1
1.20 Nov 10, 2010 LMS1
1.10 Apr 27, 2010 LMS1
|
"Юзера дурковали по чрному!" (с)
|
|
|
|
24.10.2015, 18:45
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Как в STM8S208 использовать весь объем памяти 128к?
Ну хотя бы поставить последний
IAR Embedded Workbench for STMicroelectronics STM8 2.10 Nov 18, 2014
для начала. А то первые версии у них были весьма чудесатые.
|
|
|
|
24.10.2015, 19:13
|
|
Вид на жительство
Регистрация: 24.08.2015
Сообщений: 252
Сказал спасибо: 7
Сказали Спасибо 50 раз(а) в 36 сообщении(ях)
|
Re: Как в STM8S208 использовать весь объем памяти 128к?
Напиши мелкую порграммулину на компе, которая будет брать текстовик с твоими строками и на выходе отдавать ресурсный файл, у которого в начале будет массив указателей на эти строки. И рекомпил ресурсов можно поставить в pre-build, тогда эти строки можно в этом самом проекте и править.
|
|
|
|
24.10.2015, 19:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: Как в STM8S208 использовать весь объем памяти 128к?
costco, я так примерно сейчас и делаю. Конечно, это легче, чем если делать это чисто вручную, но все равно трудоемко. Вернее, трудоемкость выражается в затраченном времени. Много операций.
И в то же время не дает покоя мысль, что достаточно может что-то указать в настройках компилятора, может просто галочку поставить - и все заработает и так. Будет обидно, если в конце концов так и окажется.
|
|
|
|
24.10.2015, 20:32
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Как в STM8S208 использовать весь объем памяти 128к?
С АСМой лень было ковыряться, не моё. А вот в Си больше 60К заглотило.
Цитата:
|
IAR ELF Linker V2.10.4.157 for STM8
Copyright 2010-2015 IAR Systems AB.
501 bytes of readonly code memory
63 068 bytes of readonly data memory
272 bytes of readwrite data memory
Errors: none
Warnings: none
|
В свойствах проекта можно попробовать модели памяти установить на large.
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
24.10.2015, 22:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: Как в STM8S208 использовать весь объем памяти 128к?
Сообщение от STM32F0
|
В свойствах проекта можно попробовать модели памяти установить на large.
|
Да, я пробовал и medium, и large, но не помогало. Но все равно, спасибо за дополнительный толчок в направлении настроек.
Дело в том, что я формирую проект на основе того встроенного шаблона, который использует IAR при создании нового проекта. А шаблон этот простейший, состоит всего лишь из нескольких строк. И там есть такая строка:
SECTION `.near_func.text`:CODE:NOROOT(0)
До тех пор, пока я использовал память в пределах 32 килобайт, все транслировалось без проблем. Поэтому и шаблон, и эта строка меня устраивала. А когда начались проблемы с ограничением памяти, я перепробовал много разных изменений. И в настройках выбирал medium и large, и пробовал открывать еще одну секцию - все безуспешно.
Проблема была еще в том, что не удалось найти в инете хорошего описания IAR. А то описание, что в хелпе, очень примитивное. Нет нормальных примеров по использованию директив. В данном случае меня интересовали подробности использования директивы SECTION.
А те примеры программ, которые в инете, тоже не помогли. Потому что в основном все примеры простые, не требующие много памяти, и в них моя проблема не возникает, потому и не решается.
Так вот, после совета " установить на large" я еще раз поискал места в программе и настройках, которые могут влиять на объем отведенной памяти. И попробовал изменить
SECTION `. near_func.text`:CODE:NOROOT(0)
на
SECTION `. far_func.text`:CODE:NOROOT(0)
Сработало! После этого дозволенный размер кода с 32к увеличился до 64к.
Попробовал после этого еще раз в настройках установить large, но все равно не действует.
В общем, это уже очень неплохой результат. Теперь надо искать нормальное описание директив, чтобы двигаться еще дальше. Но, похоже, что STM8 и так не очень балуют подробностями, а тем более ассемблер для него.
|
|
|
|
24.10.2015, 22:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: Как в STM8S208 использовать весь объем памяти 128к?
Да, для лучшего понимания моей ситуации, выкладываю скелет моей программы:
.
Цитата:
|
MODULE asmmain
#include "iostm8s208cb.h"
PUBLIC __iar_program_start
PUBLIC main
EXTERN CSTACK$$Limit
SECTION `.far_func.text`:CODE:NOROOT(0)
__iar_program_start:
LDW X, #CSTACK$$Limit-1 ; Set stackpointer0x001700 ;
LDW SP, X
main:
ld A,#0
ld CLK_CKDIVR,A
Tab_soob
db $00, $00, $00, $00, $00
- - - - - - - - - - - - - - - - - -
здесь еще несколько тысяч подобных строк,
чтобы заполнить нужный объем памяти
- - - - - - - - - - - - - - - - - -
db $00, $00, $00, $00, $00
END
|
Саму программу я сюда пока не вписываю, только большой массив данных, для проверки ограничения памяти.
В общем, очень надеюсь на любую помощь, пусть даже это будет простая подсказка.
Или ссылка на хорошее описание IAR.
Последний раз редактировалось Alex9797; 24.10.2015 в 22:32.
|
|
|
|
25.10.2015, 00:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: Как в STM8S208 использовать весь объем памяти 128к?
В общем, проблема решилась.
Причем очень просто, и файл с ответом был под носом. Просто я даже не думал искать в нем. Его название "embOS_STM8_IAR.pdf".
Оказалось, что достаточно было заменить строку:
SECTION `.far_func.text`:CODE:NOROOT(0)
на
SECTION `.huge_func.text`:CODE:NOROOT(0)
и теперь можно использовать все 128к памяти.
|
|
|
Сказали "Спасибо" Alex9797
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:23.
|
|