xstyler 0 1 июля, 2011 Опубликовано 1 июля, 2011 (изменено) · Жалоба К примеру существует main.c, lcd.h(описане прототипов) и lcd.c. Возможно ли сделать структуру которую бы видели все файлы и могли ее менять (без указателей).? typedef struct ww { int a; int b; } ww_t; Изменено 1 июля, 2011 пользователем Pavel_Bor Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 1 июля, 2011 Опубликовано 1 июля, 2011 · Жалоба Возможно ли сделать структуру которую бы видели все файлы и могли ее менять (без указателей).? А что, там настолько необычный С? Или в школку не ходили? ;) H: typedef struct { ... } my_type; extern my_type my_struct; C: my_type my_struct; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 1 июля, 2011 Опубликовано 1 июля, 2011 · Жалоба сделать структуру которую бы видели все файлы и могли ее менять (без указателей)Может быть я не понять Вашу проблему... Ну, делов то: сделайте эту структуру глобальной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xstyler 0 1 июля, 2011 Опубликовано 1 июля, 2011 (изменено) · Жалоба А что, там настолько необычный С? Или в школку не ходили? ;) H: typedef struct { ... } my_type; extern my_type my_struct; C: my_type my_struct; писал точно также: typedef struct { uint8_t seconds; uint8_t minutes; uint8_t hours; uint8_t day; uint8_t month; uint16_t year; } RTC_BCD_t; extern RTC_BCD_t rtcTime; вызов из-того же файла идет нормальный но вот из любого другого.. Например void function(RTC_BCD_t rtcTime); которая находится в lcd.h, выдает ошибку на undefined symbol. При попытке описать структуру в lcd.h на первой строке объявления переменной пишет declaration syntax error. Изменено 1 июля, 2011 пользователем Pavel_Bor Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 1 июля, 2011 Опубликовано 1 июля, 2011 · Жалоба Например void function(RTC_BCD_t rtcTime); которая находится в lcd.h, выдает ошибку на undefined symbol. При попытке описать структуру в lcd.h на первой строке объявления переменной пишет declaration syntax error. Ну дык нужно в хедер включить хедер, и будет Вам щастье. Или (для извращенцев) соблюсти последовательность включения хедеров в файл С. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 1 июля, 2011 Опубликовано 1 июля, 2011 · Жалоба писал точно также: extern RTC_BCD_t rtcTime; вызов из-того же файла идет нормальный но вот из любого другого.. Например void function(RTC_BCD_t rtcTime); которая находится в lcd.h, выдает ошибку на undefined symbol. При попытке описать структуру в lcd.h на первой строке объявления переменной пишет declaration syntax error. 1. Где-то (в каком-то одном файле) ваша структура должна быть без extern 2. Поместить #include "lcd.h" после директив включения/вставки стандартных h-файлов (как минимум того, где определены uint8_t, uint16_t) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xstyler 0 1 июля, 2011 Опубликовано 1 июля, 2011 (изменено) · Жалоба Ну дык нужно в хедер включить хедер, и будет Вам щастье. Или (для извращенцев) соблюсти последовательность включения хедеров в файл С. при таком варианте тоже declaration syntax error( хотя должно работать. 1. Где-то (в каком-то одном файле) ваша структура должна быть без extern 2. Поместить #include "lcd.h" после директив включения/вставки стандартных h-файлов (как минимум того, где определены uint8_t, uint16_t) То есть если я создаю структуру в хидере. то там extern не должно быть? Изменено 1 июля, 2011 пользователем Pavel_Bor Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaly 0 1 июля, 2011 Опубликовано 1 июля, 2011 · Жалоба Не надо путать описание структуры и определение переменных. Описываем в "lcd.h" тип #ifndef _LCD_H_ #define _LCD_H_ typedef struct { int a; int b; } type_lcd; #endif в "main.c" определяем переменную и пользуемся #include "lcd.h" type_lcd var_lcd в "lcd.c" используем ту же самую переменную #include "lcd.h" extern type_lcd var_lcd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 1 июля, 2011 Опубликовано 1 июля, 2011 · Жалоба в "lcd.c" используем ту же самую переменную #include "lcd.h" extern type_lcd var_lcd[/code] достаточно написать extern type_lcd var_lcd в хидер файле который подключается ко всем C файлам (напр lcd.h или global.h), и эту переменную будет видно во всех C файлах. в "main.c" определяем переменную и пользуемся #include "lcd.h" type_lcd var_lcd Хлам набрасывать в main не есть гут. Эта переменная относится к LCD, самое место объявить ее не в main.c, а в lcd.c итого правильный вариант будет таким: 1. в lcd.h описываем тип. 2. в lcd.c объявляем переменную этого типа. 3. во все C файлы которые будут использовать lcd - подключаем include "lcd.h" 4. в конце lcd.h делаем объявление переменной с ключем extern (копи-паст объявления из C файла, и слово extern вперед). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xstyler 0 1 июля, 2011 Опубликовано 1 июля, 2011 · Жалоба Спасибо заработало. Но все-таки пришлось убрать uint8_t хотя они в данном случае и не нужны. В обычном с++ есть конструкторы и деструкторы, есть ли они под CVAVR? можно ли писать функции внутри структуры? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 1 июля, 2011 Опубликовано 1 июля, 2011 · Жалоба Но все-таки пришлось убрать uint8_t хотя они в данном случае и не нужны. в global.h или types.h (который добавляется во все без исключения файлы) опишите типы которые вам всегда нужны: typedef unsigned char U8, uint8_t; typedef unsigned short U16, uint16_t; typedef unsigned long U32, uint32_t; typedef unsigned long long U64, uint64_t; typedef signed char S8, int8_t; typedef signed short S16, int16_t; typedef signed long S32, int32_t; и т.д. и будет щастье, таскайте его потом за собой во все проекты. есть ли они под CVAVR Есть ли C++ в CVAVR? Пользуйте нормальный компилятор (IAR / WinAVR) и будет. можно ли писать функции внутри структуры? в C можно использовать callback'и typedef struct tagSOME_CONEXT { void (*OnRead)(struct tagSOME_CONTEXT *); void (*OnWrite)(struct tagSOME_CONTEXT *); void (*DoSmthSimple)(void); } TSOME_CONTEXT, *PSOME_CONTEXT; TSOME_CONTEXT someContext; void BlinkLed(void) { PORTB = 0xff; delay_ms(10); PORTB = 0x0; } someContext.DoSmthSimple = BlinkLed; // <- назначить колбэк someContext.DoSmthSimple(); // <-- вызвать колбэк Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться