Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > IAR: когда include код по .h-файлам, не работает.


Автор: VLeshka 20.4.2018, 16:11
Когда в main включается .cpp, в который включается файл .h, то этот код работает.

Когда в main включается .h, (а файл .cpp добавляется в проект в окне Files), то этот код не работает.
Пишет:
Error[Pe165]: too few arguments in function call C:\IAR\General\gsm.cpp 571 
Error[Pe167]: argument of type "int" is incompatible with parameter of type "unsigned char const *" C:\IAR\General\gsm.cpp 572 

Почему?

Код .h:
Код

void AddToPointUCS2(const unsigned char* word, unsigned char wordCnt);
void AddToPointUCS2(unsigned char number);


Код .cpp:
Код

void AddToPointUCS2(const unsigned char* word, unsigned char wordCnt)
{
  const unsigned char* wordEnd = word + wordCnt - 1;
  for (; word<=wordEnd; word++)
    if ( (0x0D == *word) | (0x0A == *word) )
    {
      AddToPointUCS2(0x00); //ошибка
      AddToPointUCS2(0x0A); //ошибка
    }
    else
    if (*word < 0xA8)
    {
      AddToPointUCS2(0x00); //ошибка
      AddToPointUCS2(*word); //ошибка
    }
    else
    {
      AddToPointUCS2(0x04); //ошибка
      AddToPointUCS2(*word - 0xB0); //ошибка
    }
}
void AddToPointUCS2(unsigned char number)
{
  *(sds.pBuffer)++ = LCD_NumberToCharHex(number >> 4);
  *(sds.pBuffer)++ = LCD_NumberToCharHex(number & 0x0F);
}

Автор: Romikgy 20.4.2018, 19:16
Цитата(VLeshka @  20.4.2018,  15:11 Найти цитируемый пост)
AddToPointUCS2(0x00);


AddToPointUCS2((unsigned char )0x00); 
а так ?

Автор: VLeshka 21.4.2018, 00:58
Цитата(Romikgy @ 20.4.2018,  19:16)
Цитата(VLeshka @  20.4.2018,  15:11 Найти цитируемый пост)
AddToPointUCS2(0x00);


AddToPointUCS2((unsigned char )0x00); 
а так ?

Тоже.

Автор: Romikgy 21.4.2018, 21:50
Цитата(VLeshka @  20.4.2018,  15:11 Найти цитируемый пост)
gsm.cpp

весь файл дайте 

Автор: VLeshka 23.4.2018, 09:44
Цитата(Romikgy @ 21.4.2018,  21:50)
Цитата(VLeshka @  20.4.2018,  15:11 Найти цитируемый пост)
gsm.cpp

весь файл дайте

Он очень большой.

Автор: VLeshka 23.4.2018, 10:16
Но я нашёл причину. Проверил на отдельном компьютере. Я использовал только код, приведённый мною в первом посте.

Утра вечера мудренее. smile Заметил, что ругается *только* в приведённой мною подпрограмме. А если вызывается
Код

AddToPointUCS2(0x00);

не из упомянутой мною подпрограммы, а из любого другого места, где виден 
Код

void AddToPointUCS2(unsigned char number) );

то работает нормально. Как будто из подпрограммы:
Код

void AddToPointUCS2(const unsigned char* word, unsigned char wordCnt);

не видно заголовков подпрограмм, объявленных в .h-файле.

Добавил .cpp в строку:
Код

extern void AddToPointUCS2(unsigned char number);

- и код заработал. Я чего-то не понимаю? smile Где в каком справочнике эта особенность описана?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)