Je travaille sur un projet Keil utilisant c. Dans l'un de mes fichiers, j'ai défini certaines variables en haut comme étant statiques. Je les utilise dans certaines fonctions de ce fichier et je les utilise également dans une déclaration switch/case. Par exemple:variables statiques dans les instructions de commutation
au sommet où les variables sont définies:
static uint8_t* imageData = 0;
static uint32_t height = 0;
static uint32_t width = 0;
static uint32_t stride = 0;
au milieu du code:
switch (pMsg->MsgId)
{
case WM_CREATE:
{
CAMERA_Init();
AMProcessor *processor = new AMProcessor();
struct block blocks[2] = {
{2, 240, 160},
{2, 160, 120}
};
processor->initBlocks(blocks, 2);
stride = 480; //sample_image.width;
processor->Initialize(480, 272, 480, InputTypes::CHROMA_MOBILE, InputTypes::RGB);
BSP_LED_Toggle(LED3);
while(1){
const PictureOutput* picOut = processor->ProcessImage((uint8_t *)CAMERA_FRAME_BUFFER);
break;
}
}
et près du fond, j'ai deux ou trois fonctions qui utilisent également variables Cependant, j'obtiens des avertissements qui me disent que les 4 variables définies en haut sont initialisées mais jamais référencées. Si elles ne sont pas statiques, je n'obtiens pas cet avertissement, mais j'obtiens une erreur de faute matérielle (que j'essaie de me débarrasser).
Donc, ma question est, pourquoi sont-ils pas référencés? Cela a évidemment quelque chose à voir avec la définition statique, mais comment se fait-il que la définition statique ne permette pas de les référencer?
pour la clarification: Je reçois ce message sur chacun d'eux, même foulée. avertissement: # 177-D: variable « imageData » a été déclarée mais jamais référencé
J'ai une fonction au fond qui utilise toutes ces variables qui ressemble à ceci:
bool ReadImageFromPgmFile(const char* pFileName, uint32_t &height, uint32_t &width, uint8_t*& ImgData) {
if (pFileName == 0) {
return false;
};
// read data from file
if (strstr(pFileName, ".pgm") || strstr(pFileName, ".PGM")) {
FILE *pPgmFile = fopen(pFileName, "r");
if (pPgmFile == NULL) {
fprintf(stderr, "Cannot open PGM file '%s'.\n", pFileName);
return false;
};
char x = fgetc(pPgmFile);
char y = fgetc(pPgmFile);
if (x != 'P' || y != '5') {
fprintf(stderr, "Invalid PGM file '%s'.\n", pFileName);
return false;
};
uint32_t maxvalue;
fscanf(pPgmFile, "%d", &width);
fscanf(pPgmFile, "%d", &height);
fscanf(pPgmFile, "%d", &maxvalue);
if (maxvalue > 255) {
fprintf(stderr, "File '%s' has incorrect format.\nOnly 8-bit PGMs are supported by this reader.\n", pFileName);
return false;
};
ImgData = new uint8_t[width*height];
memset(ImgData, 0, width*height);
fgetc(pPgmFile); // skip new line character
uint32_t nPixelsRead = fread(ImgData, 1, width * height, pPgmFile);
fclose(pPgmFile);
if (nPixelsRead != width * height) {
fprintf(stderr, "PGM file '%s' does not contain all pixels.\n", pFileName);
return false;
};
return true;
}
return false;
};
Je ne vois pas où vous utilisez ces variables ... – Joe
Je ne peux voir que la "foulée" utilisée. Quel est exactement le message d'erreur que vous obtenez? – Steve