ANSIC中,通过函数指针调用的函数的参数的个数没有限制,但是KeilC对此有限制,至多3个参数。
因为,KeilC编译时,无法通过函数指针找到该函数的局部数据段,也就无法通过局部数据段传递参数,只能通过寄存器传递参数,所以参数个数是有限制的。
碰到这个问题时解决办法是:
① 将该函数改为reentarnt类型。
② 修改源程序,将多个参数放在一个结构体中传递。
交叉汇编
移植的时候可能还需要编写少量的51汇编程序。
汇编和C互相调用应该遵守KeilC的参数传递和返回值传递规则。
为了使汇编程序也能够进行overlay分析,汇编的书写要有一定的格式。
另外需要强调的一点是:被C程序调用的汇编函数可以使用所有的寄存器,而不用担心会修改C程序中使用的寄存器。