
Checksum на програмната памет на PIC
Здравейте!
Намислил съм при стартиране на едно устройство да правя проверка на програмната памет и да рапортувам ако има нещо нередно. До тук добре. Намерил съм начин да го правя - малко заобиколен вярно - но все пак работещ.
1. Карам компилатора да ми смята check сума за определена част от програмата и да ми я запише на определено място. Това за да не се налага при всяка промяна да смятам наново. Да смята компилатора - каква му е работата.
2. После аз също си изчислявам собствена такава при стартиране на програмата.
3. Сравнявам двете стойности, като преизчислявам допълнително заради влиянието на боотлоадера.
4. Ако има несъответствие - пиша по дисплея потребителя да му дърпа жицата и да почва да ме търси усилено.
Като четох обаче по тоя въпрос - попаднах на следното:
В компилатора на HI-TECH има следния текст:
By default, if the destination of the checksum is an address in program memory the generated
startup routine will include a built-in verification of this checksum. If this is not desired, this test
can be disabled with the option --runtime=-checksum.
В моя случай тоя тест е забранен.
От любопитство обаче направих проба: - и вярно прави се някаква проверка!
Махнах боотлоадера за да опростя работата, и ако при програмирането променя записаната сума която МПЛАБА е сметнал - програмата не тръгва изобщо.
Явно тоя "built-in verification" метод работи - ама не ми е ясно какво прави.
Аз, понеже както би казал Никола Киров съм "жалък пикоборец"

и нямам даже дебъгер. Та за това и сам не мога да разбера какво точно прави тоя код дето компилатора си го донажда сам. Явно че проверява всичката програмна памет и сравнява със checksum-ата записана от компилатора. Ако съвпадне - добре, Ама ако не - тогава какво става?
Та въпроса е ако някой се е сблъсквал с това - да ни открехне и нас!