~ 8 Oct 2013, 18:06
Какво се случва напоследък (че отдавна не съм писал тук)...
∙ Ходихме до Украйна и се отбихме до Чернобил... още пиша пътепис оттам, ще го постна тук като го привърша...
∙ Април месец бях спечелил състезанието Code IT, от което ми подариха един багажник неща и най-важното - полет със суперлек самолет в околностите на Долна Баня. Беше МАНИАКАЛНО! Пилотът даже ми даде да направя два виража и едно спускане, като единия завой съм го хванал на клипче (снимам и пилотирам самолет, чак се учудвам на собствената си наглост):
Има и клипчета: [излитане], [вираж], [нисък полет].
∙ Отново ще организираме семинара CG², като този път ще има и сесия за 3D дизайнери. А задачата по програмиране я преобразувахме в задочна.
∙ Отново водя курсовете по 3D Графика и Трасиране на Лъчи. Интересът поне към първата лекция беше на ниво, студентите запълниха цялата 101-ва, което лично не очаквах и ме зарадва много приятно :)
∙ Жичкаджийските проекти съм им дал малко почивка засега. Последно се обучавах как се работи с осцилоскоп (благодарение на един човек, имам временно една малка играчка, която е с много неинтуитивен интерфейс, но все пак върши работа като за новобранец). Чрез нея успях даже да създам визуално сравнение: C vs асемблер, на 8-битов PIC:
Тук измервам времето за пращане на един байт към 8-битов shift регистър. Закачил съм скопа на clock пина. Около 2.2 пъти разлика. От туй по-визуално сравнение - здраве му кажи :)
#1 от Димитър Томов, изпратено на 22 Sep 2014, 10:49
Единственият начин това сравнение да е вярно е, ако ползвате изключително раздуто начално инициализиране при C варианта, което всъщност да е забавянето при изпълнение на application частта. Дори и bit bang управление на шифт регистър на С е сходно с това на асемблер. Оптимизацията на bit,byte и т.н инструкциите отдавна е добро. И не се генерира излишен код. Освен ако не уцелиш някой компилаторски бъг ... feature де :D
А да не говорим, ако стартираш програмата и тя чака да натиснеш бутон, примерно, за да изпрати байта към шифт регистъра. Тогава, ако изобщо има разлика, тя ще е в рамките на 0,хх % , т.е някаква част от % или казано друго ядче 1/1000, 1/10000 и т.н.
Поздрави
#2 от anrieff, изпратено на 23 Sep 2014, 18:44
Ами всъщност въобще не е така.
В случая микроконтролер командва 7-сегментен индикатор, като ползва шифт регистъра да разшири краката си, т.е. чрез 2 крака командва 8-те катода на индикатора.
Очевидно индикатора е мултиплексиран и е необходимо честа смяна на стойността на шифт регистъра, в моя случай - 1000 Hz. При това положение 62 µs време за комуникация дава 6.2% заетост на контролера в управление на индикацията. В C варианта, имаме 135 µs, или 13.5%, разликата е значителна.
Проблемът, в случая е, че компилаторът въобще не генерира оптимален код, понеже ползвам безплатния компилатор на Microchip (преди беше на Hi-tech), а на него му е изключен оптимайзера с цел да те накарат да си купиш платената версия, която е $500. Ако бях ползвал AVR (за който си има GCC, а и архитектурата е добре измислена, подхожда за компилатори), разбира се, разликата щеше да е незначителна.
Би било интересно, разбира се, да се провери каква би била разликата при пуснати оптимизации. Като знам каква гнусна архитектура е PIC, все си мисля, обаче, че компилаторът ще има още хляб да яде.