Тест "Счастливые билеты"





Здравствуйте, уважаемые читатели! Традиционно, первой программой для микроконтроллера становится мигающий светодиод, наглядно демонстрирующий работоспособность простейшей программы. Предлагаю немного усложнить, но сделать намного интереснее первую программу, написанную под русскую отладочную плату MSTN-M100. Пусть первой программой будет оригинальный тест эффективности компиляторов, предложенный владельцем ресурса Кон-Тики Сергеем Тарасовым - "Счастливые билеты". Запуск такой программы позволит не только наглядно убедиться в работоспособности устройства, но и примерно оценить быстродействие микроконтроллера и эффективность компилятора языка С в машинный код.

Есть такая шуточная примета, что если сумма цифр первой половины номера равна второй половины номера автобусного билета - то билет является "счастливым". Поскольку номер билета шестизначный, то существует миллион комбинаций номеров, из которых 55252 являются "счастливыми".

Программа будет в цикле перебирать весь миллион комбинаций, подсчитывать "счастливые" комбинации и в конце менять состояние красного светодиода. Вот текст программы:

Программа отличается от простейшей "мигалки" только тем, что вместо выполнения миллионов пустых циклов обрабатывается полезная задача - в данном случае, подсчёт "счастливых" билетов. Прошивка платы MSTN-M100 фирменной утилитой - замигал красный светодиод, результат рассчитывается честно, не 55251, и не 55253, а честных 55252 билета!

Теперь можно примерно оценить эффективность компилятора. Время выполнения теста при тактовой частоте 80МГц составило 0,105с, то есть всего 105мс! В среднем, на выполнение главного цикла уходит шесть операций, плюс операция на внешние циклы, то получается, что результирующее быстродействие на уровне 67 млн. оп/с, то есть, по тактам, порядка 83% от теоретического, хотя если считать по даташиту в 1,25 млн. оп./с. на 1МГц, то выходит 67% теоретического быстродействия!

Поскольку, флешпамять микроконтроллера имеет задержку в четыре такта, хоть и разбита на четыре параллельно работающих банка, я думаю, что код программы компилятор вполне мог поместить в оперативную память микроконтроллера. Кстати, есть один тонкий момент, у ядра ARM Cortex-M3 есть несколько команд, выполняющих по две операции за такт, например умножение плюс сложение, поэтому такие впечатляющие результаты могут получаться за счёт архитектурных особенностей микроконтроллера.

Архив с проектом.


Благодарю за внимание, доброго здоровья!



Сайт работает на микрокомпьютере