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

 
 
 
Reply to this topicStart new topic
> IAR C проблема с функциями SIN, COS, При их использовании программа дурит
Д_М
сообщение Jun 18 2014, 08:18
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Здравствуйте!
Проблема была замечена на версии IAR 2.28 подтвердилась на версии 6.40. Когда в программе используются функции вычисления sin, cos, то, что было написано и отлажено давным давно, дурит самым нелепым образом. После заремлевания sin, cos дури, нет. В настройках проекта стек возврата, дата стек, размер кучи, увеличены раза в 2..4, относительно величин по умолчанию. Других соображений, что вышеупомянутые функции затирают что-то лишнее, у меня нет. Что ещё есть смысл изменить в настройках? Какие соображения на этот счёт?
Спасибо!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 18 2014, 08:35
Сообщение #2


Гуру
******

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



Цитата(Д_М @ Jun 18 2014, 11:18) *
В настройках проекта стек возврата, дата стек, размер кучи, увеличены раза в 2..4, относительно величин по умолчанию.
Хм. А почему не в 3...5 раз? Стеку надо давать столько, сколько требует функция. Сколько требуют sin и cos понятия не имею. Куча им не нужна. Для начала увеличьте стек данных насколько возможно. Но вполне возможно, что им не хватит и всей оставшейся у вас памяти. На вашем месте я бы создал отдельный проект из одного вызова такой функции, перед вызовом заполнил все ОЗУ каким-то кодом вроде 0xAB, прогнал его в симуляторе и после возврата из функции посмотрел, как далеко от начала стека код 0xAB затерт.


--------------------
На любой вопрос даю любой ответ
"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
megajohn
сообщение Jun 18 2014, 11:40
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Д_М @ Jun 18 2014, 12:18) *
Какие соображения на этот счёт?


было подобное в MSVC, дурил modf, целую часть возвращал нормально, а фрактальную нет.
Причина оказалась банальна - не был в соответсвующем С-файле включен хедер <math.h>
хотя в дизасме вроде переходило куда надо.


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 19 2014, 06:51
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Д_М @ Jun 18 2014, 12:18) *
Какие соображения на этот счёт?

Про стек уже говорили. Но в общем случае любое изменение исходников программы, и даже опций компилятора, может привести к сбоям. Например, если в нужных местах нет volatile. Или если корректность программы зависит от времени выполнения некоторых участков.
Go to the top of the page
 
+Quote Post
den_po
сообщение Jun 19 2014, 12:07
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Банальность: процессор в свойствах проекта правильный указан?
Ну и я бы воспользовался пошаговым выполнением и сохранением содержимого ОЗУ в файл до и после вызовов функций, сравнил бы, узнал, что и где портится.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 20 2014, 05:47
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(den_po @ Jun 19 2014, 18:07) *
Ну и я бы воспользовался пошаговым выполнением и сохранением содержимого ОЗУ в файл до и после вызовов функций, сравнил бы, узнал, что и где портится.

В случае многозадачной ОС и/или наличия ISR-ов это не гарантирует результат. То что происходит в реалтайм и в пошаговом времени - разные вещи.
Go to the top of the page
 
+Quote Post
den_po
сообщение Jun 20 2014, 07:02
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Цитата(jcxz @ Jun 20 2014, 09:47) *
В случае многозадачной ОС и/или наличия ISR-ов это не гарантирует результат. То что происходит в реалтайм и в пошаговом времени - разные вещи.

Ну если человек уверен, что виноват код функций, а не задержки при их вызове, такая проверка - самое то.
Go to the top of the page
 
+Quote Post
Rash
сообщение Jun 20 2014, 07:10
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



В других версиях не пробовал, но в 6.70, нормально работает и Sin и Cos
Go to the top of the page
 
+Quote Post

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

 


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


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