Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EW430 v4.10A
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
msalov
Столкнулся с такой синуацией.
Установка галочки "Position independent code", приводит к тому, что программа страдает от переполнения стэка в 100% случаев. Без этой опции всё работает замечательно.
Может какие особые требования предьявляются к программе? Помошите понять причину.

С уважением.
rezident
А вы проверьте по ассемблерному листингу задается ли в этом случае значение указателю стека вообще и treshhold для указателя в частности?
msalov
Цитата(rezident @ Nov 12 2007, 12:49) *
А вы проверьте по ассемблерному листингу задается ли в этом случае значение указателю стека вообще и treshhold для указателя в частности?

Код
__program_start:
004052   4031 3900         mov.w   #0x3900,SP

Имеется такая строка при обоих вариантах настройки. Выполнение программы начинается с адреса 0х4052 (то есть с этой строки).
А вот где посмотреть treshhold увы я не в курсе. Просвятите пожалуйста.

P.S. прибор MSP430F1611, программа линкуется с Normal DLIB
rezident
Цитата(gotty @ Nov 12 2007, 17:09) *
А вот где посмотреть treshhold увы я не в курсе. Просвятите пожалуйста.

Я не священик, чтобы свЯтить wink.gif Могу лишь просвЕтить, что treshold для стека задается в опциях проекта Project->Options->General Options->Stack/Heap. Кстати, в EW430_CompilerReference.pdf указано, что при выборе Position independent code может создаваться значительный оверхед. Может поэтому у вас на размер стека ругается?
msalov
Цитата(rezident @ Nov 12 2007, 14:32) *
Я не священик, чтобы свЯтить wink.gif Могу лишь просвЕтить, что treshold для стека задается в опциях проекта Project->Options->General Options->Stack/Heap. Кстати, в EW430_CompilerReference.pdf указано, что при выборе Position independent code может создаваться значительный оверхед. Может поэтому у вас на размер стека ругается?


Настройки стека оставлены по умолчанию (галочки "Override default" снята). Компилятор/линковщик на размер стека не ругается. При выполнении программы SP выходит за "допустимые" границы и после очередного возвращения из функции, программа "улетает" в неизвестном направлении и оттуда не возвращяется.

rezident, спасибо за помощь.
Сергей Борщ
Цитата(gotty @ Nov 12 2007, 16:03) *
Компилятор/линковщик на размер стека не ругается.
Компилятор за стек не волнуется. Линковщик проверяет, что стек указанного размера умещается в ОЗУ. А вот тот факт, что в стек не умещаются необходимые данные, вы должны контролировать самостоятельно. Увеличте стек, не бойтесь трогать галочку.
msalov
Цитата(Сергей Борщ @ Nov 12 2007, 16:17) *
Компилятор за стек не волнуется. Линковщик проверяет, что стек указанного размера умещается в ОЗУ. А вот тот факт, что в стек не умещаются необходимые данные, вы должны контролировать самостоятельно. Увеличте стек, не бойтесь трогать галочку.


Увеличивать стек не страшно (в данный момент изпользуется 890 байт под переменные, остальные 9.1кб - стек). Интересно другое. В руководстве есть замечание по поводу увеличения кода программы, а на лицо увеличение использования RAM помимо всего прочего.
rezident
Цитата(gotty @ Nov 12 2007, 20:02) *
а на лицо увеличение использования RAM помимо всего прочего.

Попробуйте использовать опцию уменьшения использования стека.
Project->Options->C/C++ compiler->Code->Reduce stack usage
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.