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

 
 
 
Reply to this topicStart new topic
> IAR, помогите с #include
uriy
сообщение Apr 10 2007, 11:32
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



имеется некий проект в нем файлы main.c, uart.c и uart.h
_________________________
Содержимое main.c:

#include "uart.h"

void main (void)
{
// тут естесно код
}

________________________

содержимое uart.h

#ifndef _UART_H
#define _UART_H

#define RX_BUF_SIZE 8

char rx_buf[RX_BUF_SIZE];

void putchar(char c);
void print(char *c);
#endif //_UART_H

_________________________

содержимое uart.c

#include "uart.h"

void putchar(char c)
{
//код
}

void print(char *c)
{
//код
}



Оба файла uart.c и uart.h подключаю к проекту с помощью Add files.. в результате при компиляции вылазит ошибка о том что переменная char rx_buf[RX_BUF_SIZE]; определна дважды. Если все делать без хидеров в одном файле main.c работает.
Что я делаю не так?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 10 2007, 12:00
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(urasinov @ Apr 10 2007, 10:32) *
Что я делаю не так?

содержимое uart.h
extern char rx_buf[RX_BUF_SIZE];

содержимое uart.c

#include "uart.h"
char rx_buf[RX_BUF_SIZE];


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 10 2007, 14:01
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Угу. Сергей Борщ прав. Объявлять/декларировать глобальную переменную нужно только в одном СИшном модуле. В других ее (их) нужно включать как внешние через квалификатор extern.
Go to the top of the page
 
+Quote Post
uriy
сообщение Apr 11 2007, 11:42
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



спасибо все заработало
Go to the top of the page
 
+Quote Post
dek_t
сообщение Jun 24 2007, 12:09
Сообщение #5





Группа: Новичок
Сообщений: 1
Регистрация: 24-06-07
Пользователь №: 28 660



Если уж разбивать на модули, то в main не нужен rx_buf. Его должны использовать только функции uart.c
а main оперирует с функциями из uart. Или наоборот буфер в main и передавать в uart ссылку на буфер. Смотря какая задача. Это ООП получается )

Сообщение отредактировал dek_t - Jun 24 2007, 12:24
Go to the top of the page
 
+Quote Post

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

 


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


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