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

 
 
 
Reply to this topicStart new topic
> EW430 v4.10A, Position independent code
msalov
сообщение Nov 12 2007, 09:53
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Столкнулся с такой синуацией.
Установка галочки "Position independent code", приводит к тому, что программа страдает от переполнения стэка в 100% случаев. Без этой опции всё работает замечательно.
Может какие особые требования предьявляются к программе? Помошите понять причину.

С уважением.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 12 2007, 10:49
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А вы проверьте по ассемблерному листингу задается ли в этом случае значение указателю стека вообще и treshhold для указателя в частности?
Go to the top of the page
 
+Quote Post
msalov
сообщение Nov 12 2007, 12:09
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



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

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

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

P.S. прибор MSP430F1611, программа линкуется с Normal DLIB

Сообщение отредактировал gotty - Nov 12 2007, 12:11
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 12 2007, 12:32
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



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

Я не священик, чтобы свЯтить wink.gif Могу лишь просвЕтить, что treshold для стека задается в опциях проекта Project->Options->General Options->Stack/Heap. Кстати, в EW430_CompilerReference.pdf указано, что при выборе Position independent code может создаваться значительный оверхед. Может поэтому у вас на размер стека ругается?
Go to the top of the page
 
+Quote Post
msalov
сообщение Nov 12 2007, 14:03
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(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, спасибо за помощь.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 12 2007, 14:17
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
msalov
сообщение Nov 12 2007, 15:02
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



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


Увеличивать стек не страшно (в данный момент изпользуется 890 байт под переменные, остальные 9.1кб - стек). Интересно другое. В руководстве есть замечание по поводу увеличения кода программы, а на лицо увеличение использования RAM помимо всего прочего.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 12 2007, 16:25
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(gotty @ Nov 12 2007, 20:02) *
а на лицо увеличение использования RAM помимо всего прочего.

Попробуйте использовать опцию уменьшения использования стека.
Project->Options->C/C++ compiler->Code->Reduce stack usage
Go to the top of the page
 
+Quote Post

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

 


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


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