27.02.2013, 12:16
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
да по сути и нет никакого вызова ... Насколько я вижу это просто передача параметров вызова сопроцессору, вычисление и сохранение результата ...
Если отвечать непосредственно на ваш вопрос, то ответ "никак" (IAR) ... Насколько я знаю, компилятор будет инлайнить лишь ту функцию, которая в том же файле располагается... Если ф-ция библиотечная либо внешняя, то компилятор её не увидит, а подключаться она будет на этапе линковки ... Таким образом вызов ф-ции из прерывания приводит к сохранению всех scratch регистров, даже если ф-ция их не использует ... На первый взгляд это кажется бессмысленным, но если понимаешь суть, то всё на своих местах ... Существуют некоторые "выверты" они обсуждались на электрониксе, но это нюансы ... Общий принцип, надёюсь, я донёс ...
===
Теперь о деталях ... В вашем случае инлайнить не надо ... Компилятор, по идее, при оптимизации должен убрать промежуточные пересылки ... Если математика сложная, то надо пользоваться более крупными ф-циями или использовать свою на асме с использованием сопроцессора ...
|
|
|
|
27.02.2013, 13:23
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от SasaVitebsk
|
Теперь о деталях ... В вашем случае инлайнить не надо ... Компилятор, по идее, при оптимизации должен убрать промежуточные пересылки ... Если математика сложная, то надо пользоваться более крупными ф-циями или использовать свою на асме с использованием сопроцессора ...
|
Скажи проще - не использовать IAR.
Потому что даже при оптимизации все так же плохо ...
Код:
|
0x8000308: 0x00000244 DC32 580 ; 'D...'
0x800030c: 0x20000000 DC32 testInput
0x8000310: 0x00000000 DC32 0 ; '....'
arm_sqrt_f32(testInput, &testOutput);
main:
Region$$Table$$Limit:
0x8000314: 0x4805 LDR.N R0, ??main_0 ; testInput
0x8000316: 0xed90 0x0a00 VLDR S0, [R0]
0x800031a: 0xeeb5 0x0a40 VCMP.F32 S0, #0.0
0x800031e: 0xeef1 0xfa10 VMRS APSR_nzcv, FPSCR
0x8000322: 0xbfc8 IT GT
0x8000324: 0xf000 0xf804 BLGT _sqrtf ; 0x8000330
while (1)
??main_1:
0x8000328: 0xe7fe B.N ??main_1 ; 0x8000328
0x800032a: 0xbf00 NOP
??main_0:
0x800032c: 0x20000000 DC32 testInput
_sqrtf:
sqrtf:
0x8000330: 0xeeb5 0x0ac0 VCMPE.F32 S0, #0.0
0x8000334: 0xeef1 0xfa10 VMRS APSR_nzcv, FPSCR
0x8000338: 0xd402 BMI.N 0x8000340
0x800033a: 0xeeb1 0x0ac0 VSQRT.F32 S0, S0
0x800033e: 0x4770 BX LR
0x8000340: 0xf06f 0x4c00 MVN.W R12, #-2147483648 ; 0x80000000
0x8000344: 0xee00 0xca10 VMOV S0, R12
0x8000348: 0xf000 0xb800 B.W __iar_edom ; 0x800034c
__iar_edom:
0x800034c: 0xb51f PUSH {R0-R4, LR}
0x800034e: 0xf000 0xf803 BL __aeabi_errno_addr ; 0x8000358
0x8000352: 0x2121 MOVS R1, #33 ; 0x21
0x8000354: 0x6001 STR R1, [R0] |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 27.02.2013 в 13:30.
|
|
|
|
27.02.2013, 14:19
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от dosikus
|
Скажи проще - не использовать IAR.
|
Использовать или не использовать тот либо иной инструмент, выбирает для себя пользователь ... Я вас не агитирую за IAR ...
С другой стороны вы, собственно, вызываете ф-цию из библиотеки arm_math.h. Она случайно не ARM написана? Что-то подсказывает ...
У вас есть возможность использовать мат библиотеку от st ...
Честно скажу я не разбирался с этим, хотя вот-вот придётся ... У меня в приборе будет определятся свойства газов, включая динамическую вязкость, плотность и прочую хренотень ... там, по каждому газу трёхэтажные формулы, десятки страниц. Только коэффициенты занимают несколько килобайт ... Так что мне это ещё предстоит ... ![Очень смешно](images/smilies/icon_veryhappy.gif)
Кинте проект, если не затруднит .. гляну.
|
|
|
|
27.02.2013, 14:27
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от SasaVitebsk
|
С другой стороны вы, собственно, вызываете ф-цию из библиотеки arm_math.h. Она случайно не ARM написана? Что-то подсказывает ...
У вас есть возможность использовать мат библиотеку от st ...
|
Это и есть CMSIS .
Спасибо за "подсказку" юзать SPL которая в свою очередь юзает ту же либу CMSIS.
Весьма оригинальная помощь...
__________________
Осторожно , злой кот
|
|
|
|
27.02.2013, 15:23
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Ну извините, я написал, что не разбирался в составе библиотек и во взаимоувязке .. Если это CMSIS, то претензии к IAR тем более напонятны ... Вроде, насколько я читал, у GCC чуть по лучше абстоит с оптимизацией на уровне асма. По крайней мере по AVR такое имеет место быть.
Я насколько понял у вас stm4f киньте проект попробую посмотреть, хотя врятли чем я помогу ...
Я такой же как и все. Бывают случаи что мне что-то не нравится в результирующем коде. Тогда я пытаюсь найти узкое место и в первую очередь пытаюсь "объяснить" компилятору. Если это не помогает, то закасываю рукова, локализую кусок и переписываю на асме. Оформляю в виде п/п и вперёд на мины ... ![Очень смешно](images/smilies/icon_veryhappy.gif)
С другой стороны выбор у вас небольшой ... )) Писать на асме для ARM с плавучкой, это не на AVR баловаться. И даже не на x86. Перепишите вашу sqrt. Кто мешает?
Возможно вам вот это будет интересно http://electronix.ru/forum/index.php?showtopic=107703 скажем от создателя сборок GCC
|
|
|
|
27.02.2013, 15:59
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от SasaVitebsk
|
Я насколько понял у вас stm4f киньте проект попробую посмотреть,
|
Дык нет проекта . Все что было нацарапано , выложено выше.
Я так же только осваиваю STM32. Попутно сравниваю IDE и компиляторы.
И пока выбор явно не в пользу IAR . Ну я пляски с Eclipse убьют все прелести GCC.
__________________
Осторожно , злой кот
|
|
|
|
27.02.2013, 16:56
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Хорошо, постараюсь завтра посмотреть ...
Сообщение от dosikus
|
Попутно сравниваю IDE и компиляторы.
И пока выбор явно не в пользу IAR . Ну я пляски с Eclipse убьют все прелести GCC.
|
Так а тут вариантов не густо ... IAR, Keil (MDK), GCC... остальное всё экзотика...
С GCC я не работал сказать затрудняюсь. С Keil и IAR работаю сейчас. Так несколько проектов LPC176x у меня на Keil и один текущий проект у меня под IAR. С IAR работал очень много.
Высскажу своё мнение (не навязываю!!!!). Среда дерьмовая и там и там. Мне субъетивно Keil нравится меньше. Это касается закладок, окошек, опций проекта и так далее ... Будут вопросы - могу в отдельной ветке. Масса была хвалебных отзывов о Keil в плане отладки и симулирования ... У меня прямо противоположные отзывы. Так же могу в отдельной ветке детально. Самое простое - Keil. ОС RTX (своя!). Создаю 2 задачи по обслуживанию USART. Точнее 2 копии одной задачи. Во время отладки вообще не верно вычисляет смещения и в результате в окне отладки я вижу неверные значения локальных переменных! Более того полностью отсутствует возможность их указать!
Приведу пример как это возможно сделать в IAR (в Keil это просто не доступно).
Представим себе что идут команды в прибор из COM порта. Команда представляет собой объект (структуру). Имя команды и поля разные. В зависимости от имени - поля разные. Прибор их размещает в буфере и обрабатывает. Грубо говоря у меня динамически размещается некоторая структура данных. Так вот я в окне watch открываю просмотр объекта своего (команды) и указываю его реальный адрес. И всё! Я сразу вижу свой объект, со всеми полями, где бы он не находился! Проделать такое в Keil я не смог.
Короче Keil попроще конечно. Но Iar получше. Но главное преимущество - можно между процами ползать легко. Это очень удобно. Проекты перетягиваются на раз.
|
|
|
|
27.02.2013, 20:06
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
ИАР, похоже текстовый редактор переделывает:
26.02.2013 вышла версия ЕWSТМ8 1.40.1
Highlights Version 1.40.1:
• New text editor A new text editor and source browser are introduced in this version. The new features include auto completion, parameter hint, code folding, block select, block indent, bracket matching, zoom and word/paragraph navigation.
• New source browser The new source browser adds features like Go to Declaration and Find All References to symbols but also a possiblity to display a call graph for easy navigation of the function hierarchy.
• Subversion The version control integration has been extended with support for Subversion (SVN).
|
|
|
|
27.02.2013, 20:38
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от SasaVitebsk
|
Но Iar получше. Но главное преимущество - можно между процами ползать легко. Это очень удобно. Проекты перетягиваются на раз.
|
Собственно я не буду вставать в позу защитника/ фаната чего либо.
Но, а что вы скажете на то, что перетащить в Keil на другой камень еще проще чем в IAR ?
В том же проекте создать другую конфигурацию.
__________________
Осторожно , злой кот
|
|
|
|
28.02.2013, 00:18
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Я работаю с stm8 - ARM(stm32/lpc) - msp430 - AVR...
IAR это всё поддерживает. Keil - нет. У меня есть один проект где выбирается проц lpc2106/ atmega640. Есть один проект где выбирается stm8s208/ at90can128.
Не совсем понимаю, что значит создать другую конфигурацию ...
Как правило и та и та среда содержит 2 вкладки проекта. debug/ target (для Keil) и debug/ release для IAR. Для IAR можно создать хоть 10 вкладок таких. Я это делал. Более того, Atmel поставляет apnotes с bootloader-ом c AES, так там вообще типа выбираешь закладку проца и компилишь. 1 общий проект под все процы. У меня попроще сделано, но сделано. Это вообще не сложно. Сейчас речь не об этом. Keil поддерживает только 3 среды x51, ARM, и x86 siemens. IAR поддерживает десятки включая даже PIC.
Вот у меня, к примеру сейчас HART модем написан на atmega8/88. А я хочу перенести его на stm32f100. Так я минимум переделывать буду. И будет проект с общими исходниками.
Последний раз редактировалось SasaVitebsk; 28.02.2013 в 00:21.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:22.
|
|