在各种平台下做过很多智能卡应用开发的COS研发人员应该都有一些感悟,就是在你从一个平台移植到另一个平台的时候如果代码设计的不够好,会经常重新根据芯片特性进行重新架构和设计,这是一个非常繁杂的任务,而且不能保证质量,耗时也长。
不同的芯片平台最主要的几个区别就是以下几点:芯片开发环境、芯片CPU位数(8位、16位或者32位)和主频、内存资源、ROM资源、FLASH或者EEPROM资源以及寄存器的参数等。这些芯片硬件参数的不同造成了移植COS代码的时候必须进行相关部分的重新编码。所以在一个平台上实现一个智能卡应用的COS设计时要充分考虑到以后的可移植性。
以下是我以前COS开发的一些经验:
有些平台的内存是对齐的,譬如三星的S3FS91J就是内存4字节对齐的例子,而有些平台例如英飞凌的SLE88CFX4000P则是1字节对齐,即不需要对齐的。这种内存属性的差异会对哪种实现方法造成影响呢?
大家用C语言开发最熟悉的莫过于结构体了,什么是结构体我在这就不说了,熟悉C语言的人应该都清楚,不知道的那就是不熟悉C语言。
我们在做内存管理的时候一般都会自己管理内存,用自己的方法去实现,这种管理如果没有特殊处理可能就会分配出非对齐的内存地址,这种实现在没有对齐要求的平台上使用是没有问题的,但是如果要移植到另一种对内存对齐有要求的平台上就会出现问题了,一个非对齐的内存指针指向一个结构体空间的话,从里面取出来的变量值是不对的,它的起始地址是该指针地址的对齐地址,所以按照偏移计算出来的位置就不对了,取出来的值自然就不正确。
其实有很多实际问题用结构体不能完全实现,譬如变长的,用结构体就很难把那种数据结构化,结构体主要还是面向于固定数据长度的一组数据,当