Entry tags:
Решена проблема деления на STM32F042
В попытке выяснить, кто же виноват, и что с этим делать, я собрал в кучу заголовочные файлы от ST с инициализацией от opencm3 и сделал "безбиблиотечную" среду.
Для проверки деления набросал «мыргалку», которая либо равномерно мигает диодом с периодом 4 секунды (если надета перемычка между землей и PA12), либо морзянит "SOS".
arm-none-eabi-gcc, собираемый кроссдевом в генте на этом примере обломался: как только я снимал перемычку, микроконтроллер уходил в глубокие раздумья.
Гугол подсказал мне, что эта проблема возникала далеко не у меня одного. И решения ее стандартным gcc просто нет! Но есть пропатченные тулчейны. Отсюда я скачал тулчейн, распаковал директорию в /opt и попробовал.
Теперь в директории arm-none-eabi/lib/thumb появились раздельные библиотеки для разных архитектур ARM. Вот эта строчка Makefile
Жаль, что в генте так плохо с разработкой под микроконтроллеры!
Для проверки деления набросал «мыргалку», которая либо равномерно мигает диодом с периодом 4 секунды (если надета перемычка между землей и PA12), либо морзянит "SOS".
arm-none-eabi-gcc, собираемый кроссдевом в генте на этом примере обломался: как только я снимал перемычку, микроконтроллер уходил в глубокие раздумья.
Гугол подсказал мне, что эта проблема возникала далеко не у меня одного. И решения ее стандартным gcc просто нет! Но есть пропатченные тулчейны. Отсюда я скачал тулчейн, распаковал директорию в /opt и попробовал.
Теперь в директории arm-none-eabi/lib/thumb появились раздельные библиотеки для разных архитектур ARM. Вот эта строчка Makefile
LDLIBS += $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)позволяет слинковаться с правильной библиотекой (v6-m/libgcc.a). В итоге деление работает без проблем!
Жаль, что в генте так плохо с разработкой под микроконтроллеры!
no subject
no subject
Вообще, надо gcc5 попробовать. Возможно, у него этого бага нет.
no subject
Вообще странно, потому как у меня 4.8 работает без проблем, был достаточно сложный дизайн, там всяко было деление. А есть подробная ссылка на issue?
no subject
Уже и не помню, что там за функция вызывалась, что-то вроде __udiv_from_thumb. По ней гугол и выдал кучу матов народа, у которого деление вызывало hardfault.
Сейчас сравнить не могу: дома компилял.
no subject
Hardfault у меня в ртоси отслеживается и вываливает корку. Такого не было. Ты на 0 проверял? В аппаратном делении тоже hardfault при /0, там нужно предварительно пару флагов поставить, чтобы оно вызывало usage fault. Вот я подозреваю что там криво сделана эмуляция и всего то.
no subject
Кстати, в этом не сам gcc виноват, а newlib. У меня версия 2.0.0.
> Ты на 0 проверял?
Не проверял. Но, судя по дизассемблеру, ничего страшного быть не должно.
Обновил newlib до 2.5.0. Ничего не изменилось: железякозависимые версии библиотеки не собрались. В общем, этот crossdev хрень какую-то генерит!
no subject
Далпаеб. Там даже системный флаг есть, который по такому условию hard/usage fault делает. Возможно где-то могли и эмулировать.