Форум программистов, компьютерный форум, киберфорум
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/17: Рейтинг темы: голосов - 17, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430

iar ругается на структуру

24.05.2016, 14:32. Показов 3747. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.
написал файл .h в нем структура вида:
Code
1
2
3
4
#pragma pack(push,1)
struct node{
} mem_card;
#pragma pack(pop)
подключил библиотеку в main. В main все работает как только добавляю данную структуру в другой unit. то iar выдает ошибку Error[Li006]: duplicate defymitions for "mem_card";. Как подключить структуру в других блоках? через extern не хочу придется каждый раз после изменения в .h менять данные во всех блоках.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.05.2016, 14:32
Ответы с готовыми решениями:

IAR размещает структуру по непонятным адресам вне ОЗУ
Переношу пример DHCP для WIZNET W5100, где используется структура для формирования DHCP запроса. Выяснилось, что IAR почему то размещает...

IAR Internal Error: нужна помощь по IAR и по C++
Просьба к тем, у кого есть IAR AVR версии выше, чем 5.11B/W32 (5.11.2.5): не могли бы вы скомпилировать ниже преведенный код, и сказать,...

компилятор ругается на структуру
попалась вот такая вот структура для графа, но компилятору она не нравится.... template <class V, class E> struct graph { ...

12
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
24.05.2016, 14:49
Именно через extern и надо: в .h описываете тип структуры и пишете extern ..., в .c - без extern определяете переменную. После изменения .h ничего менять не придётся.
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
24.05.2016, 15:26
Можете показать пример? А то когда используешь
#pragma pack(push,1)
typedef struct node{
} mem_card;
#pragma pack(pop)
extern mem_card Info;
ругается указатель на структуру index_mem = (uint8_t *)&mem_card; Error[Pe254]: type name is not allowed
0
 Аватар для Парфирий
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 4
24.05.2016, 15:30
Цитата Сообщение от zhytimkov
index_mem = (uint8_t *)&mem_card; Error[Pe254]: type name is not allowed
Возможно, должно быть:
Code
1
index_mem = (uint8_t *)&info;
Указатель получать нужно на конкретную переменную, а не на название типа данных
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
25.05.2016, 14:45
Взял адрес от элемента структуры uint16_t * p = &Info.number; (number элемент структуры) компилятор выдал предупреждение Warning[Pa039]: use of address of unotygned structure member
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
25.05.2016, 15:37
а вопрос в чем?
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
25.05.2016, 15:42
Цитата Сообщение от zhytimkov
Взял адрес от элемента структуры uint16_t * p = &Info.number; (number элемент структуры) компилятор выдал предупреждение Warning[Pa039]: use of address of unotygned structure member
Судя по Вашему коду выше (#pragma pack(push,1)) Вы упаковываете структуры, отсюда и предупреждение unotygned access. Вы уверены что упаковка нужна? Для Sortix-M3+ это будет работать медленно, для младших просто не будет работать.
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
25.05.2016, 20:18
Почему медленно с чем связано(mcu stm32f429)? выровнять структуру надо в нее пишу данные из usb vcp . После принятия данных пишу структуру eeprom очень удобно указываешь Адрес структуры и записываешь в память. После есть необходимость менять определенные элементы структуры и записывать их в eeprom. Каждый раз переписывать всю память eeprom где находится структура мягко говоря не правильно. По этой причине нужно вычислить адрес элемента в eeprom который нужно перезапесать. Для этой цели хотел сделать следующей алгоритм брать адрес начало структуры и адрес элемента их разница даст количество байт. Динное количество байт писать в адрес eeprom с учетом начального адреса расположения структуры в eeprom. Но вот компилятор выдал предупреждения. Как можно решить по другому?
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
26.05.2016, 13:43
Скажите какие есть средства выравнять структуру?
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
26.05.2016, 13:53
#pragma pack?
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 430
26.05.2016, 13:59
orm999 говорит что #pragma pack плохо. Просто не всегда получается выравнивать подбором элементов структуры.
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
26.05.2016, 14:16
Цитата Сообщение от zhytimkov
orm999 говорит что #pragma pack плохо. Просто не всегда получается выравнивать подбором элементов структуры.
Цитата Сообщение от zhytimkov
Почему медленно с чем связано(mcu stm32f429)?
Я не говорю что это плохо, просто нужно использовать со знанием.

Медленоо в два раза потому что из флешки данные читаются словами и если Вы прочитывете данные члена упакованной структуры, адрес которого не выровнен по слову ядро прочитает два слова вместо одного:
[..] слова
{..} - невыровненный член структуры
Code
1
[ _ _ _ {_][_ _ _} _]
В Вашем случае это не критично потому что вряд-ли Вы так часто и много читете/пишите в eeprom чтобы это сказалось на скорости или потреблении, а дело компилятора прото предупредить что имеет место быть доступ к невыровненному адресу.
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
26.05.2016, 14:48
если нужно выровнять поля так, как будет лучше процессору - ничего не надо делать, компиляторы сами это делают сразу. другое дело, если нужно кастомное выравнивание или его отсутствие. тут кроме прагма пак или сырого массива байт с ручным вытаскиванием байтов и слов (что куда хуже прагмы!) сложно что-то придумать. посему - если реально нужно - пусть будет прагма. если сомневаешься - значит не нужно.

опять же, применительно к вашей задаче. память еепром настолько ценна, что нужно экономить несколько потерянных из-за выравнивания байт? а чтобы не перезаписывать неизменившиеся данные, можно просто байт за байтом пройтись по озу и еепром и записать только то, что изменилось. никакой проблемы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2016, 14:48
Помогаю со студенческими работами здесь

масм ругается на структуру WNDCLASSEX
wc WNDCLASSEX <48, CS_HRWDRAW or CS_VREDRAW, offset WndProc, 0, 0, 400000h, 10001h, 10011h, COLOR_WINDOW+1, 0, addr ClassName, 0> error...

Почему vk ругается на бесплатные хостинги? На какие не ругается?
Здравствуйте, Что нужно сделать, чтобы vk не ругался на бесплатный хостинг? Я нашёл отличный хостинг 5gbfree.com. Я на нём храню свои...

Объявить динамическую структуру данных, выделить память под указатель на структуру
Написать программу, в которой нужно объявить динамическую структуру данных с именем Hole и поля Name, Value и Next, выделить память под...

объявить динамическую структуру данных, выделить память под указатель на структуру
Написать программу, в которой нужно объявить динамическую структуру данных с именем Node и поля Name, Value и Next, выделить память под...

Как создать структуру-список, поля которой — ссылка на такую же структуру
Суть вопроса в том, как создать структуру-список, поля которой - ссылка на сл. элемент(такую же структуру) и ссылка на объект, относящийся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru