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

 
 
> Как в IAR сделатькак в GCC?
inventor
сообщение Sep 5 2017, 14:36
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



делаю драйвер для русской ethernet микросхемы
микруха голая - может только отправлять/принимать
кадры ethernet. плюс broadcast /unicast и все.
есть микростек, написаный для GCC, но его прямое копирование
и простые замны вызывают hard fault из за чтения/записи
по адресам не выравненным на 4.
в GCC это как то обходится, не знаю правильно или нет.

вот что я хочу сделать в IAR как в GCC:
1)
CODE

#pragma pack(2)
typedef union {
uint8_t u8[6];
uint16_t u16[3];
}/* __attribute__ ((packed))*/ mac_addr_t;


#define MAC_ADDR( a, b, c, d, e, f ) { u8: { a, b, c, d, e, f }}

Это возможно?

2) даные , коорые пересылаются в сети, например ARP пакет

CODE
/**
* Заголовок ARP
*/
#pragma pack(2)
typedef struct {
uint16_t hw_type;
uint16_t prot_type;

uint8_t hw_len;
uint8_t prot_len;
uint16_t oper;

mac_addr_t s_mac;
ip_addr_t s_ip;
mac_addr_t t_mac;

ip_addr_t t_ip;
}/* __attribute__ ((packed))*/ arp_packet_t;


если я напрямую беру поля, как это сделано в GCC: например
CODE

p->oper = ARP_OPER_REPLY;
p->t_mac = p->s_mac;
p->s_mac = mac_addr[ ifc ];
p->t_ip = p->s_ip;
p->s_ip = ip_addr[ ifc ];

вызывает описанную ошибку.
я такие выборки элементов структуры сделал черем memcpy
но хотелось бы оставить как это сделано в GCC
возможно ли это?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Sep 5 2017, 17:59
Сообщение #2


Гуру
******

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



Так, это, #pragma pack(2) на #pragma pack(1) замените. Или, еще лучше, перед объявлением структуры сделайте #pragma pack (push,1), а после объявления - #pragma pack(pop)


--------------------
На любой вопрос даю любой ответ
"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
inventor
сообщение Sep 5 2017, 20:39
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(Сергей Борщ @ Sep 5 2017, 20:59) *
Так, это, #pragma pack(2) на #pragma pack(1) замените. Или, еще лучше, перед объявлением структуры сделайте #pragma pack (push,1), а после объявления - #pragma pack(pop)

наверное в описании пакета это не обязательно - там все уже упаковано хоть на 2 хоть на 1


Цитата(VladislavS @ Sep 5 2017, 20:53) *
Если вы уверены, что hard fault вызывает именно этот код, то пройдите его пошагово в режиме ассемблера. В десятке ассемблерных команд нетрудно найти причину.

А вообще, компилятор должен сам корректно тип доступа определять, если ему насильно не пытаться указать.


да, проходил пошагово
асм не смотрел - обрывается как раз на доступах к структуре
если бы было все правильно-там был бы вызов какой нить функции
типа мemcpy_unaligned
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 6 2017, 06:13
Сообщение #4


Гуру
******

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



QUOTE (inventor @ Sep 5 2017, 23:39) *
если бы было все правильно-там был бы вызов какой нить функции
типа мemcpy_unaligned
Скорее там было бы встроено побайтовое обращение и склейка в длинную переменную. Вызов функции требует больше накладных расходов.


--------------------
На любой вопрос даю любой ответ
"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

Сообщений в этой теме
- inventor   Как в IAR сделатькак в GCC?   Sep 5 2017, 14:36
- - VladislavS   Цитата(inventor @ Sep 5 2017, 17:36) возм...   Sep 5 2017, 16:57
|- - inventor   Цитата(VladislavS @ Sep 5 2017, 19:57) Ст...   Sep 5 2017, 16:59
- - VladislavS   Если вы уверены, что hard fault вызывает именно эт...   Sep 5 2017, 17:53
|- - Сергей Борщ   QUOTE (inventor @ Sep 5 2017, 23:39) наве...   Sep 5 2017, 23:09
- - Timmy   Ваша ситуация выглядит очень странной, все структу...   Sep 7 2017, 12:04
|- - inventor   Цитата(Timmy @ Sep 7 2017, 15:04) Ваша си...   Sep 7 2017, 16:50
|- - VladislavS   Цитата(inventor @ Sep 7 2017, 19:50) доба...   Sep 7 2017, 18:03
- - inventor   еще один вопрос: ест ли в IAR какая нибудь опция ч...   Sep 27 2017, 15:58
|- - SSerge   Цитата(inventor @ Sep 27 2017, 22:58) еще...   Sep 28 2017, 09:51
|- - scifi   Цитата(SSerge @ Sep 28 2017, 12:51) Не ви...   Sep 28 2017, 10:08
|- - inventor   Цитата(SSerge @ Sep 28 2017, 12:51) Не ви...   Sep 28 2017, 12:29
- - Obam   Больше 20 лет контора компилятор делает (секту сво...   Sep 28 2017, 08:05
- - inventor   Цитата(Obam @ Sep 28 2017, 11:05) Больше ...   Sep 28 2017, 08:48
- - Obam   Цитата(inventor @ Sep 28 2017, 12:48) GCC...   Sep 28 2017, 11:06


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 10:15
Рейтинг@Mail.ru


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