Justamente es un "padding" para mantener la alineacion.
+-------+-------+
| code |
+-------+-------+
| code |
+-------+-------+
| code |
+-------+-------+
| code |
+-------+-------+
| code |
+-------+-------+
| code |
+-------+-------+
| code |
+-------+-------+
| code |
+-------+-------+
| contrl| rev |
+-------+-------+
| pin |
+-------+-------+
| year1 | mth1 |
+-------+-------+
| day1 | hr1 |
+-------+-------+
| min1 | |
+-------+-------+
| year2 | mth2 |
+-------+-------+
| day2 | hr2 |
+-------+-------+
| min2 | |
+-------+-------+
| nrec |
+-------+-------+
Esos huecos vacios los hace para mantener la alineacion de 16 bits de las estructuras tStart, tEnd. Es decir, ubicando la memoria termina con tStart y va a comenzar con tEnd, como ve que supera el byte toda esa estructura (recorda que en tu estructura tIdentityRecord estas agregando TODA una estructura y no bytes individualmente), lo alinea a los 16bits, esto ocurre nuevamente cuando se encuentra con nrec, en el que no entra ese byte solo y procede a "paddear" la memoria.
Lo que podes hacer es tratar de ponerlo como packed. Aunque es de GCC supuestamente funciona en CCS segun lei en su foro.
struct __atribute__((packed)) tIdentityRecord{
....
}
En 8 bits no hay problema, pero por eso pregunte sobre que cantidad de bits tenias, al ver que eran impares.
Aunque la respuesta que dieron en el foro de CCS, esto le respondieron:
It is relatively new to the compiler, that is why it's not documented yet.
You also have to be careful using it, because addressing a word pointer if it's not word aligned will cause address failure on a 16bit PIC. This should only happen if you manually created a pointer to an individual entry in the structure, which according to many C purists is bad code design.
En el que uses un puntero y sin querer apuntes no alineado a la memoria. PIC24/dsPIC permiten el acceso a memoria en bytes
Resumen:
Si usas pointers para acceder a la estructura : Va a depender del micro exclusivamente ( que pueda hacer accesos indirectos a bytes, el PIC24 lo posee).
Si no usas pointers: Podrias llegar a tener una "recarga" o mas tiempo para sacar el dato, "limpiarlo" para poder leerlo si es que no posee acceso a bytes, pero el PIC24 lo tiene.
Para que quede claro por si las dudas se habla de portabilidad.
PD: Si te sirve de consuelo, hubiera sido peor en 32 bits xD