ссори за долгое отсутствие
Цитата(Dog Pawlowa @ Feb 13 2007, 10:37)

Ребят, ну давайте не пытаться быть умнее компилятора! :-)
Я вот прикинул.... Я пишу программы для микропроцессоров и микроконтроллеров 22 года, из них 16 последних на ЯВУ, и ни разу не задумывался, как передаются параметры в функцию.
Пишу для микропроцессоров менее 22 лет, но вот пришлось задуматься где передаются параметры

Есть девайс (ККМ), в котором пользователь иногда запускает "критический" процесс с "критическими" секциями исполнения программы. Например печать журнала чеков. Если при печати вырубается питание, то по включении ККМ должна продолжить печать с того чека, на котором прервалась печать. Причем все накопления по предыдущим чекам не должны пропасть.
Что я делаю:
1. при выключении питания по прерыванию сохраняю адрес критической секции (печать одного чека)
2. ее параметры - номер чека и прочее
3 и стек в котором лежат локальные переменные
По включению девайс:
1. проходит все начальные тесты и прочее
2. смотрит была ли "свертка"
3. если была, восстанавливаю адрес верхушки стека
Код
asm ("MOV.W &SVERTKA+2, SP");
и его содержимое
4. перехожу по адресу
Код
asm ("BR &SVERTKA+4");
Теперь, полагаю, уважаемой публике стало понятно, почему собственно встал вопрос топика.
Локальные переменные, которые в стеке свои значения "сохранили" от старого сеанса,
а которые в регистрах - похерились!
Можно, конечно, при свертке еще и регисты сохранять, но думал, что можно забороть умный копмилятор еще более умной директивой или ключевым словом, которые я не нарыл

Пока решил проблему так:
чтобы меньше переделывать код тупо "умыл" компилятор, объявив Var2 8-ым байтным long long'ом (в регистры запухнуть это копмилятору оказалось слабо)!
Кстати, если мне не изменяет память, я уже как то поднимал эту тему на форуме, было бы интересно узнать, кто как сворачивается-разворачивается по выкл/вкл в аналогичных ситуациях.