Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: C30 и dsPIC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
IXFN50N80Q2
Столкнулся с следующей проблемой.

Когда писал на C18, файлы в проекте(Cшные) ложил в Other Files.
В main.c делал include всех этих файлов.
Переменные и функции были объявлены в одном header "defines.h".
И все работало. Во время отладки MPLAB спокойно скакал в функции за пределами main.c

Тоже самое начал делать в C30. А он в этом случае не заходит в подключенный таким образом
файл при отладке. Да и компилирует криво. Если процедуры снести в main.c, все нормально.

Логично конечно предположить что я изначально действовал на C18 неправильно,
т.к. исходники должны быть в Source Files а я их пихал в Other Files.
Ну если я исходники начинаю пихать в Source Files то проблема следующая.

Я хочу иметь один header с объявлением всех переменных. Т.е. глобальных.
Если например в main.c и procedures.c делаю include "defines.h" ругается что несколько раз объявлены переменные. Если не поместить в procedures.c include "defines.h", он не знает такую переменную.
Вроде тема бы в интернете поднималась но вразумительного ответа я не нашел.

Нажмите для просмотра прикрепленного файла

Обработчика прерывания АЦП там нет. Но это пока не важно.
В Init проблема войти
Что сделать что бы было счастье ?
dac
QUOTE (IXFN50N80Q2 @ Sep 11 2011, 16:07) *
Что сделать что бы было счастье ?

в файле defines.h написать:

CODE
#ifndef DEFINE_H
#define DEFINE_H
// ваши объявления
...


#endif


сорри, это не все. сам defines.h невнимательно посмотрел
вы пытаетесь дважды объявить константы с одинаковым именем в разных файлах. поэтому если они вам действительно нужны, объявляете эти переменные в любом из файлов, можно даже в отдельном файле defines.c,
а в defines.h объявляете их же через extern
типа
CODE
extern void Init(void);

extern signed int a[6];
extern signed int b[6];

extern unsigned int bz[6];
extern unsigned int az[6];

extern signed long preSumBz;
extern signed long SumBz;
extern volatile unsigned int i;

хотя для i - это плохой вариант sm.gif обычно i всетаки локальные счетчики обзывают.

и вообще, эти переменные лучше не глобально объявлять, а передавать через указатели
ваш проект имхо должен выглядеть так:
rus61
Посмотрите вот этот документ http://andromega.narod.ru/doc/micrium_an_2000_rus.pdf глава 11.
IXFN50N80Q2
Спасибо за ответы. cool.gif
А то я уже массированную DDOS атаку на GOOGLE устроил запросами пытаясь найти, HowTO.
Да и документуху по компилеру читал, хотя конечно не от корки до корки.
Попробуем. С указателями тоже работал.
Скорее не проект, а так, разбираемся вообще как класс что такое dsPIC33.
По этому код писать будем по нормальному.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.