Eu enfrentei um problema estranho. Mudei meu projeto de Keil para STM32 IDE. (baseado em Eclipse e GCC). Em Keil não tenho problemas. Mas no Eclipse existe. A CPU é STM32F030xC
Estou definindo uma série de estruturas.
typedef struct
{
int width; // Character width in bits.
int offset; // Offset in bytes into font bitmap.
}
FONT_CHAR_INFO;
const FONT_CHAR_INFO microsoftSansSerif_18ptDescriptors[] =
{
{2, 0}, // !
{6, 25}, // "
{13, 50}, // #
{11, 100}, // $
e assim por diante. Existem 94 elementos. O tamanho da matriz deve ser 8 * 94 = 752 bytes Mas no mapa do vinculador vejo o tamanho 744. E no depurador está faltando um elemento. Com o índice 60. O índice 60 na memória aponta para 61 no array. Outros elementos estão presentes.
Talvez isso esteja relacionado de alguma forma com o alinhamento de dados? Mas o tamanho do array deve ser maior. Estou usando o compilador sem otimização. O que está acontecendo?
60º elemento em uma tabela ASCII começando em ! = 33, é o código 93; e o anterior com o código 92 é a barra invertida (\). O pré-processador C entende a barra invertida no final da linha como uma marca de continuação, mescla essa linha com a linha subsequente e, como você tem uma marca de comentário de linha (//) logo antes disso, toda a linha combinada é removida como um comentário.
Não coloque barra invertida no final da linha.
Testemunha de Jeová