11 тысяч глобальных переменных

цитата с баша:

Из статьи на хабре:
«Переход на графен откроет совершенно новую эпоху — частота электронных устройств может достигнуть терагерца.»

exvel: Ну, слава богу. Можно продолжать говнокодить.

Статья тут -«Качество встраиваемого ПО или погром всё-таки случился»

STM32F3 - очередной отжиг STMicroelectronics, или есть, чем пощупать аналоговые сигналы.

Компания STMicroelectronics объявила о выпуске первых микроконтроллеров семейства STM32F3 начального уровня на базе ядра ARM® Cortex™-M4, оснащенных расширенным набором интегрированных высокопроизводительных аналоговых периферийных модулей.

Читать дальше

fabs из math.h в Atmel Studio 6

Подскажите, знатоки!

Понадобилось недавно взять модуль от некоего выражения, в результате которого получается число с плавающей точкой. Подключил math.h, дабы заюзать оттуда fabs, но не тут-то было. При компиляции получил «Error 8: undefined reference to `fabs'».

В опциях линкера -lm сделал. При вычислении выражения, от которого берется модуль, используется sqrt — так оно работает, а fabs нет.

Я, конечно, по-быстрому накидал свою функцию, которая возвращает модуль, но в чём же загвоздка-то?

Настройки компилятора в Atmel Studio 6 и отладка на симуляторе - грабли

Интересная, но, в общем, неудивительная вещь при отладке — возможно, кому-то пригодится.

Заметил, что при пошаговом выполнении программы оказываюсь в той функции, которая в этот момент (да и вообще в данной конфигурации программы) не вызывается. Причем оказываюсь не в начале функции, а где-то в середине. Заинтересовался — какого, собственно?

Настройки компилятора (оптимизация) были следующие:
— уровень оптимизации -O2
— галки стояли на «Pack structure members together (-fpack-struct)» и «Prepare functions for garbage collection (-ffunction-sections)»

Попробовал поиграться с уровнями оптимизации — без толку. Выключаю -ffunction-sections — всё нормально. А жаба душит, включение этой опции даёт уменьшение размера почти в два раза.

В хелпе написано следующее:
"-ffunction-sections: Prepare functions for garbage collection, if a function is never used, its memory will be scrapped"
То бишь, если функция нигде не используется, то под неё вроде бы память не выделяется. Оно и логично, сборка мусора и все такое.

То, что меня удивило: при включенной опции — при попадании программы в середину нигде не использующейся функции выхожу я из неё буквально на следующем шаге и туда, куда мне и надо. Посмотрел окно «disassembly» — там, куда я попадаю, Сишный текст строчки из НЕИСПОЛЬЗУЕМОЙ функции есть, а ассемблерные инструкции все как надо (там идет сброс флага и выход из ИСПОЛЬЗУЕМОЙ функции, в которую я заходил и как раз должен из неё выйти) Что за ерунда — так и не понял, может, кто точно знает и расскажет? В железе пока не пробовал, но судя по ассемблерному тексту, все должно работать правильно.

В общем, резюмирую — при отладке этой опцией компилятора надо пользоваться аккуратно, а лучше не пользоваться.

Да, чуть не забыл, при использовании -ffunction-sections в опциях линкера должно быть включено «Garbage collect unused sections (-Wl--gc-sections)», а то толку от использования -ffunction-sections не будет.

Для интересующихся, про настройки компилятора и линкера: Optimisations of AVR programs using avr-gcc