int iprintf(const char *pbFmt,...)
{
va_list pArg;
char abString[256];
va_start(pArg,pbFmt);
vsprintf(abString,pbFmt,pArg);
// UARTSendData(abString);
va_end(pArg);
return 0;
}
int iprintf(const char *pbFmt,...)
{
800019B8 STMFD R13!, {R0-R3}//子函数中不必保护R0~R3,但必须压栈。
800019BC STMFD R13!, {R7, R14}//如使用R4~R11必须保护,
800019C0 ADD R7, R13, #0x8 //R7=R13+8;
800019C4 SUB R13, R13, #0x104
va_list pArg;
char abString[256];
va_start(pArg,pbFmt);
800019C8 ADD R12, R7, #0x4 //没看懂,好像没通过SP传参,还是通过R3
800019CC STR R12, [R13]
vsprintf(abString,pbFmt,pArg);
800019D0 ADD R0, R13, #0x4
800019D4 LDR R1, [R7]
800019D8 LDR R2, [R13]
800019DC BL vsprintf
va_end(pArg);
return 0;
800019E0 MOV R0, #0x0
800019E4 ADD R13, R13, #0x104
800019E8 LDMFD R13!, {R7, R14} //恢复R7和R14,
800019EC ADD R13, R13, #0x10 //和压入的R0~R3对应;不必恢复
800019F0 BX R14 //带状态切换的跳转指令
}
阅读(1207) | 评论(0) | 转发(0) |