Тест "Счастливые билеты" |
Здравствуйте, уважаемые читатели! Традиционно, первой программой для микроконтроллера становится программный мультивибратор мигающий светодиодом, наглядно демонстрирующий работоспособность простейшей программы. Предлагаю, пусть немного усложнить, зато сделать намного интереснее первую программу, написанную под русскую отладочную плату MSTN-M100. Вместо простейшей "мигалки", первой программой будет оригинальный тест эффективности компиляторов, предложенный владельцем ресурса Кон-Тики Сергеем Тарасовым - "Счастливые билеты". Запуск такой программы позволит не только наглядно убедиться в работоспособности устройства, но и примерно оценить быстродействие микроконтроллера и эффективность компилятора языка С в машинный код.
Есть старая советская шуточная примета, что если сумма цифр первой половины номера равна второй половины номера автобусного билета - то билет является "счастливым". Поскольку номер билета шестизначный, то существует миллион комбинаций номеров, из которых всего 55252 являются "счастливыми".
Программа будет в цикле перебирать весь миллион комбинаций, подсчитывать "счастливые" комбинации и в конце менять состояние красного светодиода. Вот текст программы:
Программа отличается от простейшей "мигалки" только тем, что вместо выполнения миллионов пустых циклов временной задержки обрабатывается полезная задача - в данном случае, подсчёт "счастливых" билетов. Прошиваем плату MSTN-M100 фирменной утилитой - замигал красный светодиод, результат рассчитывается честно, не 55251, и не 55253, а честных 55252 билета!
Теперь можно примерно оценить эффективность компилятора. Время выполнения теста при тактовой частоте 80 МГц составило 0,105 с, то есть всего 105 мс! В среднем, на выполнение главного цикла уходит шесть операций, плюс операция на внешние циклы. Итого, получается что результирующее быстродействие выходит на уровне 67 млн. оп/с, то есть, по тактам, порядка 83% от теоретического, хотя если считать по даташиту в 1,25 млн. оп./с. на 1МГц, то выходит 67% теоретического быстродействия!
Поскольку флешпамять микроконтроллера имеет задержку в четыре такта, хоть и разбита на четыре параллельно работающих банка, я думаю, что код программы компилятор вполне мог поместить в оперативную память микроконтроллера. Кстати, есть один тонкий момент, у ядра ARM Cortex-M3 есть несколько команд, выполняющих по две операции за такт, например умножение плюс сложение, поэтому такие впечатляющие результаты могут получаться за счёт архитектурных особенностей микроконтроллера.
Архив с проектом.
Благодарю за внимание, доброго здоровья!