|
GCC ARM - не имплементируются функции SIN, COS, arm-none-eabi |
|
|
|
Oct 1 2017, 07:34
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Здравствуйте. Скачал и поставил, затем ребутнул (для переменных окружения) GCC-тулчейн: gcc-arm-none-eabi-6-2017-q2-update-win32.exe Затем написал программу тект ниже: Код #include <math.h>
float a=1.2F; float b=3.21F; float c=0.0F;
void main(void) { c=sin(a+b); b=cos(a+c); } Построил бинарник и все необходимые файлы командами: Код arm-none-eabi-gcc -std=c99 -march=armv7-a -mfloat-abi=hard -mfpu=vfpv4 -c fpu.c -o fpu.elf -lm arm-none-eabi-objdump -D fpu.elf > fpu.asm arm-none-eabi-objcopy -O binary fpu.elf fpu.bin При просмотре листинга видно, что функции sin( ) и cos( ) НЕ ИМПЛЕМЕНТИРОВАЛИСЬ, вместо них стоит переход: Код 18: e3403000 movt r3, #0 1c: edd37a00 vldr s15, [r3] 20: ee777a27 vadd.f32 s15, s14, s15 24: eef70ae7 vcvt.f64.f32 d16, s15 28: eeb00b60 vmov.f64 d0, d16 2c: ebfffffe bl 0 <sin> ----------------------------- !!! нет вызова 30: eef00b40 vmov.f64 d16, d0 34: eef77be0 vcvt.f32.f64 s15, d16 38: e3003000 movw r3, #0 3c: e3403000 movt r3, #0 40: edc37a00 vstr s15, [r3] 44: e3003000 movw r3, #0 48: e3403000 movt r3, #0 4c: ed937a00 vldr s14, [r3] 50: e3003000 movw r3, #0 54: e3403000 movt r3, #0 58: edd37a00 vldr s15, [r3] 5c: ee777a27 vadd.f32 s15, s14, s15 60: eef70ae7 vcvt.f64.f32 d16, s15 64: eeb00b60 vmov.f64 d0, d16 68: ebfffffe bl 0 <cos> ----------------------------- !!! нет вызова Других тулчейнов нет, пробовал soft-fpu, ничего не меняется, функции из math.h не имплементируются вообще! Залез в папки тулчейна, так там libm.a несколько штук: ...\GCCARM\arm-none-eabi\lib\libm.a ...\GCCARM\arm-none-eabi\lib\thumb\libm.a ...\GCCARM\arm-none-eabi\lib\thumb\v7-ar\libm.a ...\GCCARM\arm-none-eabi\lib\thumb\v7-ar\fpv3\hard\libm.a ...\GCCARM\arm-none-eabi\lib\hard\libm.a У меня нет слов, одни эмоции (касаемо GCC тулчейна)! Помогите плиз, нужен хардварный синус/косинус для ядра Cortex-A7, VFPv4 или NEON - для floating point, как решить проблему?
|
|
|
|
|
 |
Ответов
(60 - 74)
|
Oct 3 2017, 09:15
|
Гуру
     
Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925

|
Цитата(__inline__ @ Oct 3 2017, 15:00)  Ну и разве что в кирпич можно превратить контроллер, если порт настроить на вывод и замкнуть его на питание или землю, думая что порт на вводе (кнопка). Ну или FUSE сорвать для кварца или SPI-программатора. Но это лечится. Это уровень мелких микроконтроллеров, на больших можно просто подпалить чип, ошибочно записав левое число по некому адресу, и потом метаться - либо я неправильно что-то делаю, либо чип глючный. Цитата(__inline__ @ Oct 3 2017, 15:00)  - и многое другое ЧТО ПРОСТО ОБЯЗАНО БЫТЬ В ДАТАШИТЕ (в Technical Reference) Угу, и получить эдак 10 томов по 500 страниц каждый. Да они минимум год только писать это будут, а потом каждый месяц выпускать по дополнительному тому "исправлений и дополнений"
|
|
|
|
|
Oct 3 2017, 09:20
|
Знающий
   
Группа: Участник
Сообщений: 916
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664

|
Цитата Писателям игрушек для веба это сложно понять, но тут вопрос о программировании на МК. Тестовая среда и всяческие эмуляторы куда быстрее, приятнее и нагляднее пишутся на каком-нибудь протопыхе (perl) или гвидопыхе (python). Да и куча полезного софта управляется с помощью Tcl. Модели опять же на гвидопыхе с numpy пишутся куда быстрее, чем на C или крестах. Есть, конечно, MATLAB, но он стоит сотни нефти, но есть и альтернативы - SciLab, Octave, Axiom и Sagemath (которая чуть более, чем полностью - Pyhton). Ну и во всём этом есть одна загвоздка - как правило, те, кто знают Python, perl, Java, знают так же и C. При этом странно, что те, кто знает только C так кичатся своим неприятием других инструментов.
|
|
|
|
|
Oct 3 2017, 10:07
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Цитата Это уровень мелких микроконтроллеров, на больших можно просто подпалить чип, ошибочно записав левое число по некому адресу, и потом метаться - либо я неправильно что-то делаю, либо чип глючный. Ну а ТП, там же не телепаты сидят - ей-то откуда знать что вы натворили с чипом и какие могут быть последствия? Ну и как можно спалить чип неверной записью в регистры? (про порты ввода/вывода, фьюзы и ПЛИСы - не рассказывать!) Цитата Угу, и получить эдак 10 томов по 500 страниц каждый. Да они минимум год только писать это будут, а потом каждый месяц выпускать по дополнительному тому "исправлений и дополнений Так из этих 500 страниц каждому понадобятся свои 50 страниц! Например, для моих применений - видеокодек не нужен, так же как и USB и Эзернет. Мне надо GPIO, SPI, TF, Video Out, высокая производительность ядра over 1GHz - остальное не важно! Другим наоборот. Но никто не заставляет читать все 500 страниц! Цитата Ну и во всём этом есть одна загвоздка - как правило, те, кто знают Python, perl, Java, знают так же и C Это лишь ваше мнение, которое не является правилом - не обобщайте. Ну и знания одного Си недостаточно для программирования контроллеров. Нужны ещё и базовые знания как работает железо и как его программировать.
Сообщение отредактировал __inline__ - Oct 3 2017, 10:09
|
|
|
|
|
Oct 3 2017, 10:14
|
Знающий
   
Группа: Участник
Сообщений: 916
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664

|
Цитата Это лишь ваше мнение, которое не является правилом - не обобщайте. Нет. Это мнение не моё, а весьма большого количества людей. Которые, кстати, не судят всех программистов на Си по осилившим только хэллоуворлд, ну или мигание светодиодом, в случае микроконтроллеров. Понятно, что порог входа в пыхоплеяду ниже, чем в Java/C, поэтому, в абсолютном значении monkey-coder'ов среди них, конечно, больше. Но не в процентном.
|
|
|
|
|
Oct 3 2017, 10:48
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(__inline__ @ Oct 3 2017, 13:07)  Ну и как можно спалить чип неверной записью в регистры? (про порты ввода/вывода, фьюзы и ПЛИСы - не рассказывать!) Легко! Пишете неправильное значение в регистр управления питанием и один из ip блоков в чипе подпаливается. Похоже вы сложных чипов еще не видели.
|
|
|
|
|
Oct 3 2017, 11:01
|

Знающий
   
Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663

|
Цитата Ну и как можно спалить чип неверной записью в регистры? (про порты ввода/вывода, фьюзы и ПЛИСы - не рассказывать!) Можно мои 5 коп добавить? Спасибо (; Не буду про фьюзы… Ошибочно отключенный (неверной записью в регистры) JTAG - это всё равно что спаленный чип (;
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Oct 3 2017, 11:31
|

Знающий
   
Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663

|
Цитата(__inline__ @ Oct 3 2017, 15:10)  ЕМНИП отладку у STM32F4xx можно делать через SWD + STM32 ST-LINK Utility Дык SWD на выводы JTAGа выведен Тему в "Средства проектирования" надо по-хорошему
Сообщение отредактировал Obam - Oct 3 2017, 11:35
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Oct 3 2017, 11:52
|
Знающий
   
Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250

|
Цитата(Forger @ Oct 3 2017, 11:23)  Для "веба" не пишу, но прекрасно их понимаю, и не имею ничего против развития и прогресса. Если речь про программирование применительно к "бытовым" МК, т.е. под конкретное узкоспециализированное железо, то пока что дальше C/C++ нет смысла соваться. Где возможно, я предпочитаю С++. Я и под веб нет-нет, да делю что-то (веб-морды для меня более предпочтительны, нежели содомия со standalone GUI), вот там, к сожалению, одним только С не обойтись, приходится еще жабоскрипт использовать и на html разметку делать, но это фигня — один раз помучился, и готово! Микроконтроллеры — понятное дело, там только чистый С. Я, помучившись с SPL и opencm3 на STM32, понял, что ну его нафиг — эти чужие кривые библиотеки, надо на сниппеты ориентироваться и не долбить себе мозг всякой чушью. Приложения для связи между компьютером и МК — на чистом С. На нем же клиент-серверные вещи (демоны, логгеры, интерфейсы и т.д., и т.п.). В общем, С свою актуальность не потеряет еще долго. Цитата(one_eight_seven @ Oct 3 2017, 12:20)  Ну и во всём этом есть одна загвоздка - как правило, те, кто знают Python, perl, Java, знают так же и C. При этом странно, что те, кто знает только C так кичатся своим неприятием других инструментов. Ни разу не встречал тех, кто прекрасно знает одновременно пхытон, перл, жабку и С! Это ж вообще вещи разных классов! Надо быть одновременно и гуманитарием, и технарем, чтобы умудриться все это выучить, а самое главное — понимать!!! Цитата(HardEgor @ Oct 3 2017, 13:37)  Хе-хе, попробуйте запустить простейший STM32 прочитав 50 страниц. Для мигания светодиодом без таймера нужно будет даже меньше прочесть ☺ Все равно, даже если пользоваться чужими библиотеками, надо будет читать даташит по используемой периферии. Но в случае библиотек, нужно еще скудную документацию к ним читать + ковыряться постоянно в исходниках этих библиотек (мало ли что там индусы наговнокодили — встречал я такие приколы)! Так какой смысл тащить лишнее? Лучше самому постепенно накапливать базу сниппетов, а затем по мере необходимости брать уже готовые куски кода.
Сообщение отредактировал Эдди - Oct 3 2017, 11:49
|
|
|
|
|
Oct 3 2017, 11:52
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Цитата(HardEgor @ Oct 3 2017, 10:37)  Хе-хе, попробуйте запустить простейший STM32 прочитав 50 страниц. А в больших чипах взаимосвязей и зависимостей на порядки больше. Зачем мне простейший, когда совсем недавно портировал кодек MELP800 на STM32F405 ? Bare Metal, конечно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|