реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> C30 и dsPIC, проблема с Include
IXFN50N80Q2
сообщение Sep 11 2011, 10:07
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 138
Регистрация: 12-05-09
Пользователь №: 48 987



Столкнулся с следующей проблемой.

Когда писал на 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", он не знает такую переменную.
Вроде тема бы в интернете поднималась но вразумительного ответа я не нашел.

Прикрепленный файл  S2.zip ( 73.41 килобайт ) Кол-во скачиваний: 76


Обработчика прерывания АЦП там нет. Но это пока не важно.
В Init проблема войти
Что сделать что бы было счастье ?


Сообщение отредактировал IXFN50N80Q2 - Sep 11 2011, 10:22
Go to the top of the page
 
+Quote Post
dac
сообщение Sep 11 2011, 14:49
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



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 всетаки локальные счетчики обзывают.

и вообще, эти переменные лучше не глобально объявлять, а передавать через указатели
ваш проект имхо должен выглядеть так:

Прикрепленные файлы
Прикрепленный файл  S2.zip ( 73.37 килобайт ) Кол-во скачиваний: 18
 
Go to the top of the page
 
+Quote Post
rus61
сообщение Sep 11 2011, 15:01
Сообщение #3





Группа: Участник
Сообщений: 10
Регистрация: 13-03-10
Пользователь №: 55 929



Посмотрите вот этот документ http://andromega.narod.ru/doc/micrium_an_2000_rus.pdf глава 11.
Go to the top of the page
 
+Quote Post
IXFN50N80Q2
сообщение Sep 19 2011, 17:11
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 138
Регистрация: 12-05-09
Пользователь №: 48 987



Спасибо за ответы. cool.gif
А то я уже массированную DDOS атаку на GOOGLE устроил запросами пытаясь найти, HowTO.
Да и документуху по компилеру читал, хотя конечно не от корки до корки.
Попробуем. С указателями тоже работал.
Скорее не проект, а так, разбираемся вообще как класс что такое dsPIC33.
По этому код писать будем по нормальному.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016