У меня есть еще один вопрос о встроенной инструкции по сборке, касающейся переключения контекста. Этот код может работать, но я не уверен на 100%, поэтому я отправляю этот код профессионалам stackoverflow ;-)
Я компилирую с помощью gcc (без оптимизации) для arm7TDMI. В какой-то момент код должен выполнить переключение контекста.
/* Software Interrupt */
/* we must save lr in case it is called from SVC mode */
#define ngARMSwi(code) __asm__("SWI %0" : : "I"(code) : "lr")
// Note : code = 0x23
Когда я проверяю скомпилированный код, я получаю такой результат:
svc 0x00000023
Человек до меня, который кодировал это, написал «мы должны сохранить lr», но в скомпилированном коде я не вижу никаких следов сохранения lr.
Причина, по которой я думаю, что код может быть неправильным, заключается в том, что программа запускается в течение некоторого времени, прежде чем перейти в исключение сброса, и одна из последних вещей, выполняемых кодом, - это переключение контекста...