Как я и предполагал проблема возникает при передаче параметров из СИ-шного модуля в ASM-функцию. У меня IAR EW430 5.10.6. В нем передача параметров в функцию setDate происходит через регистры R14, R13, R12.
Код
// 31 setDate(2010, 1, 1); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MOV.B #0x1, R14
MOV.B #0x1, R13
MOV.W #0x7da, R12
CALL #setDate
А в самой функции извлечение аргументов идет из R15, R14, R12
Код
mov.b r15, r6 ; day into r6
mov.b r14, r7 ; month into r7
mov.w r12, r8 ; year into r8
Отсюда и вылезают неправильные вычисления. После верного указания регистров в функции, инициализация заработала корректно
Код
mov.b r14, r6 ; day into r6
mov.b r13, r7 ; month into r7
mov.w r12, r8 ; year into r8
Правда в окне просмотра значений переменных C-CPY наблюдается некоторая неувязочка. Большинство переменных календаря отображаются как int, хотя описание всех их (кроме TI_year) идет как char. Опять какой-то глюк. Видимо от того, что переменные определены только в ASM.