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

 
 
 
Reply to this topicStart new topic
> extern struct in KEIL, объявление глобальной стуктуры
Chechelnitsky
сообщение Oct 27 2004, 18:06
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 24
Регистрация: 3-08-04
Пользователь №: 437



Пытаюсь скомпилировать opentcp-arm7-src.zip. Возникла проблема с объявлением глобальной структуры.

Подскажите пожалуйста, а то совсем замучался. Методом тыка нашел комбинацию, которая приемлема для файла main.c, но ошибка возникает в файле tcp.c

Листинг приведен ниже. Компилятор KEIL.

---------------------------------------------------------------------------------------------
file: datatypes.h
---------------------------------------------------------------------------------------------

#ifndef INCLUDE_DATATYPES_H
#define INCLUDE_DATATYPES_H

struct localmach {
int localip;
char localHW[6];
int defgw;
int netmask;
};

typedef struct localmach localmachine_t;

#endif //INCLUDE_DATATYPES_H

---------------------------------------------------------------------------------------------
file: main.c
---------------------------------------------------------------------------------------------

#include "datatypes.h"

localmachine_t localmachine;

int main (void)
{

localmachine.localHW[0] = 0x11;
localmachine.localHW[1] = 0x22;
localmachine.localHW[2] = 0x33;
localmachine.localHW[3] = 0x44;
localmachine.localHW[4] = 0x55;
localmachine.localHW[5] = 0x66;

while (1)
{

}

}

---------------------------------------------------------------------------------------------
file: tcp.c
---------------------------------------------------------------------------------------------

#include "datatypes.h"

extern localmachine_t localmachine;
^^^^^^^^^^^^^^^^^^^^^^^^^^
........

Ошибка: "TCP.C(124): error C53: redefinition of 'localmachine': different compound types"

Это особенность Keil? Или я делаю что-то не так?
Go to the top of the page
 
+Quote Post
DPL
сообщение Oct 28 2004, 05:15
Сообщение #2


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

Группа: Свой
Сообщений: 88
Регистрация: 15-10-04
Из: Новочеркасск
Пользователь №: 886



Цитата(Chechelnitsky @ Oct 27 2004, 10:06 PM)
Это особенность Keil? Или я делаю что-то не так?

Да нет, все похоже на правду. Интереса ради попробовал пропустить приведенную в сообщении конструкцию через три разных компилятора (Keil C51, Keil C166, Multi 4) - как и следовало ожидать, все компилируется без ошибок. К сожалению, кейловского компилятора ARM у меня нет.

Возможно, приемлемым окажется такое описание структуры:

---------------------------------------------------------------------------------------------
file: datatypes.h
---------------------------------------------------------------------------------------------

#ifndef INCLUDE_DATATYPES_H
#define INCLUDE_DATATYPES_H

typedef struct {
int localip;
char localHW[6];
int defgw;
int netmask;
} localmachine_t;


#endif //INCLUDE_DATATYPES_H

Это, конечно, уже пляски с бубном, но, возможно, такой вариант компилятору понравится.
Go to the top of the page
 
+Quote Post
NickB
сообщение Oct 28 2004, 11:36
Сообщение #3


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

Группа: Свой
Сообщений: 114
Регистрация: 22-06-04
Пользователь №: 102



ИМХО компилятор Keil ARM несколько сыроват. Несмотря на их заверения.
А вот ADS- хорош
Go to the top of the page
 
+Quote Post
Chechelnitsky
сообщение Oct 30 2004, 20:08
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 24
Регистрация: 3-08-04
Пользователь №: 437



Попробовал в dkarm-1.4 скомпилировать не чужой, а свой проект - все заработало.

Спасибо за ответы.
Go to the top of the page
 
+Quote Post
Chechelnitsky
сообщение Nov 1 2004, 18:59
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 24
Регистрация: 3-08-04
Пользователь №: 437



В Keil все хорошо. Среда разработки начинается нравиться, но есть непонятное:

Как изменить значение переменной при отладке?
Go to the top of the page
 
+Quote Post
DPL
сообщение Nov 3 2004, 06:57
Сообщение #6


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

Группа: Свой
Сообщений: 88
Регистрация: 15-10-04
Из: Новочеркасск
Пользователь №: 886



Цитата(Chechelnitsky @ Nov 1 2004, 10:59 PM)
Как изменить значение переменной при отладке?

Не знаю, как для ARM, но, скорее всего, как и для других семейств:

1. В режиме отладки открыть окно просмотра значений переменных (в меню "View | Watch & Call Stack Window")

2. Если переменная локальная, она уже будет в этом окне на вкладке "Local", иначе - добавить ее на вкладках "Watch 1" или "Watch 2".

3. Щелкнуть мышкой на значении переменной, нажать "F2" или щелкнуть еще раз, после чего присвоить ей требуемое значение.

PS. А что касается самой среды - действительно, очень удобно (использовал для MCS51 и C166). Особенно подкупает вполне адекватная симуляция периферии.
Go to the top of the page
 
+Quote Post
ALexx
сообщение Nov 3 2004, 11:43
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



Цитата(DPL @ Nov 3 2004, 10:57 AM)
Не знаю, как для ARM, но, скорее всего, как и для других семейств:
1...
2...
3...

Все значительно проще:
В окне Output Window в поле со знаком ">" набрать имя переменной, "=", значение переменной (например RxChar=0x35) и нажать Enter.

P.S. А вот насчет среды Вас поддерживаю на все 100. Дедушка кейл - рулез форевер! smile.gif
Go to the top of the page
 
+Quote Post
alho
сообщение Nov 3 2004, 13:21
Сообщение #8


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

Группа: Свой
Сообщений: 78
Регистрация: 6-07-04
Из: Moscow
Пользователь №: 275



Поддерживаю ! Keil - то что надо ! Всем хорош !
Go to the top of the page
 
+Quote Post
DPL
сообщение Nov 3 2004, 13:46
Сообщение #9


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

Группа: Свой
Сообщений: 88
Регистрация: 15-10-04
Из: Новочеркасск
Пользователь №: 886



Цитата(ALexx @ Nov 3 2004, 03:43 PM)
Все значительно проще:
В окне Output Window в поле со знаком ">" набрать имя переменной, "=", значение переменной (например RxChar=0x35) и нажать Enter.

To ALexx:
Забыл, забыл... smile.gif
Я этот способ использую в скриптах инициализации, чтобы задать нужные значения на входах и загрузить что нужно в память. А в процессе отладки мне кажется более удобным использовать "Watch window" (хотя это, конечно, дело вкуса).
Go to the top of the page
 
+Quote Post
jojo
сообщение Nov 4 2004, 07:56
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



Да, исходники OpenTCP надо местами переписать. А то многовато забот при переносе на другие процессоры. Сам сталкивался с тем, что некоторые конструкции разными компиляторами воспринимаются парадоксально. Например, sdcc косвенный вызов функций понимает превратно.

Если у кого есть идеи - не стесняйтесь отправлять их в форум или по почте.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th August 2025 - 17:20
Рейтинг@Mail.ru


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