Вообщем,
BigBolt вам уже все основные вещи написал. Выделю только одну мысль:
контрольная сумма памяти программ не может изменяться часто (если только сам процессор туда ничего не пишет). Она может измениться только при сбое программы, после которого уже можно ничего не делать, а только мигать и гудеть
Поэтому её не нужно считать быстро и часто. Сделайте неспешный подсчет по одному байту в главном цикле, т.е. тогда, когда спешить не нужно. За несколько секунд CRC будет вычисляться совершенно не напрягая процессор.
А вообще, стандартный подход несколько другой. CRC памяти программ вычисляется самим компилятором Си и сохраняется в последнем слове флеша. А прикладная программа непрерывна считает CRC по тому же алгоритму и сверяет с правильной. Наружу выдается только код ошибки (или мигание светодиодом, гудение и т. д.)