[an error occurred while processing this directive]
Пользуюсь компилятором PICC18 v8.20 PL4.0. Нашел ошибки, но то ли я чего-то не понимаю, то ли их служба поддержки лапшу на уши вешает (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Вопрос 08 июля 2003 г. 11:59

В общем проект состоит из двух маленьких файлов : 1.c и 2.c
Файл 1.c демонстрирует ошибку компилятора - я могу дважды объявить переменную с одним и тем же именем!!! И компилятор создает *.obj файл!
Файл 2.c демонстрирует ошибку линкера - в файле 1.c переменная объявлена как "unsigned long my_var1", а в файле 2.c как "extern float my_var1" и линкер не ругается и создает *.HEX файл, а должен ругнуться "types mismatch" и не создавать *.HEX.
В службе поддержки говорят, что у них все нормально, а это у меня компилятор инсталлирован неправильно (хотя я его переустанавливал да и если бы он был установлен неправильно, то он бы вылетал, а не делал *.obj и *.hex файлы).
Просьбочка проверить - на других компьютерах как будет вести мой проект с этим компилятором ?
Можно скопировать приведенные тексты в файлы с именами 1.c и 2.c (только в #include двойные кавычки заменить на одинарные).
Вот командные строки :
C:\HTSOFT\PIC18\BIN\picc18.exe 1.c -C -FAKELOCAL -G -E -18F242

C:\HTSOFT\PIC18\BIN\picc18.exe 2.c -C -FAKELOCAL -G -E -18F242

C:\HTSOFT\PIC18\BIN\picc18.exe 1.obj 2.obj -FAKELOCAL -G -O"test.HEX" -E -18F242

Думаю, хотят меня буржуи обмануть и не исправлять ошибки.


////////// файл 1.c ////////
#include "pic18.h" // здесь надо одинарные кавычки, но я боюсь что
// это воспримется как гипертекст

unsigned long my_var1 ;
unsigned long my_var1 ; // I can declare the same variable twice !!!

void increment( void) ;

void main( void) {
unsigned char k ;

my_var1 = 0 ;
for( k = 0 ; k < 7 ; k ++) {
increment() ;
}
}

////////// файл 2.c ///////////////////
#include "pic18.h" // здесь надо одинарные кавычки
// NB! This variable is unsigned long in file 1.c !!! Linker doesn't
// check types !!!
extern float my_var1 ;
void increment( void) {
my_var1 += 1 ;
}
/////////////////////////////////



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru