Например TDA7294

Форум РадиоКот • Просмотр темы - Записать массив в структуру.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пн июн 23, 2025 12:15:39

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 34 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Вс окт 27, 2024 08:27:17 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
tonyk писал(а):
Читайте спецификации языка. Непереносим только тип int, размеры остальных детерминированы.
Это не совсем так. Но... вероятность того, что char не будет 8 бит, да и что будет перенос кода, да ещё с неудачным попаданием на разный размер int, исчезающе мала.

Мне нравится использовать без переопределения, потому что тогда они красиво подсвечиваются в редакторе :)

tonyk писал(а):
Вопрос был про FAT, а в нём порядок байт определён.
Зато структура пишется на микроконтроллере, а в нём как повезёт. Мне вот не повезло.

tonyk писал(а):
Зачем весь этот геморрой, когда есть FATFS от Чана? Много лишнего времени?
Обучение, улучшение/оптимизация, лицензионные соглашения... причин может быть множество. У меня своя реализация, оптимизированная и в размере и по времени обращения к SD-карте (она много жрёт энергии).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Вс окт 27, 2024 08:45:47 
Первый раз сказал Мяу!

Зарегистрирован: Сб окт 23, 2021 17:05:26
Сообщений: 31
Рейтинг сообщения: 0
Цитата:
tonyk писал(а):
Зачем весь этот геморрой, когда есть FATFS от Чана? Много лишнего времени?
Обучение, улучшение/оптимизация, лицензионные соглашения... причин может быть множество. У меня своя реализация, оптимизированная и в размере и по времени обращения к SD-карте (она много жрёт энергии).[/uquote]

Да. Оптимизация это очень важно. Надеюсь мне моего ATSAM7S256 на 50 MHz хватит чтобы воспроизводить солосовые сообщения и обрабатывать некоторые аппаратные прерывания(перерисовка дисплея на светодиодной матрице, Прерывание от ИК-пульта и ещё что-то будет точно.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Вс окт 27, 2024 10:03:06 
Сверлит текстолит когтями

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1217
Рейтинг сообщения: 4
Юрий1239 писал(а):
Оптимизация это очень важно.

Вы уже упёрлись в нехватку быстродействия вашего МК, коли занялись оптимизацией?
Юрий1239 писал(а):
Надеюсь мне моего ATSAM7S256

Вы даже не оценили потребности, не протестировали, не сняли профили, зато лезете в низкоуровневую оптимизацию. С вашими познаниями языка С считать, что Чен, автор библиотеки FATFS, написал что-то мало пригодное для практического использования, как-то глупо. Поверьте, быстрей, чем у Чена, вы не напишите. У него весьма простой и быстрый код. Меняйте свой подход к разработке.
Юрий1239 писал(а):
Долго разбираться, не знаю как она работает, много лишнего кода. А там есть поддержка длинных имён ?

Вы даже не посмотрели, и сразу утверждаете, что долго разбираться. Про лишний код это вообще показатель вашей безграмотности и не владения вопросом. И да, поддержка длинных имён, ессно, есть. Изучите то, что сделали до вас, не считайте себя гением, а других тупыми неумехами.

У меня чтение документации и портирование fatfs на мой контроллер заняло один вечер. Доки внятные, всё расписано, объяснено, так что адаптация библиотеки достаточно проста.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Вс окт 27, 2024 10:18:27 
Первый раз сказал Мяу!

Зарегистрирован: Сб окт 23, 2021 17:05:26
Сообщений: 31
Рейтинг сообщения: 0
Если бы я считал себя гением я бы тут не сидели не спрашивал. Включайте логику.


Вернуться наверх
 
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения

Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Вс окт 27, 2024 20:15:45 
Это не хвост, это антенна

Карма: -10
Рейтинг сообщений: 171
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1488
Рейтинг сообщения: 0
Вы даже не оценили потребности, не протестировали, не сняли профили, зато лезете в низкоуровневую оптимизацию. С вашими познаниями языка С считать, что Чен, автор библиотеки FATFS, написал что-то мало пригодное для практического использования, как-то глупо. Поверьте, быстрей, чем у Чена, вы не напишите. У него весьма простой и быстрый код. Меняйте свой подход к разработке.
+++

Юрий1239 писал(а):
Долго разбираться, не знаю как она работает, много лишнего кода. А там есть поддержка длинных имён ?
Вы даже не посмотрели, и сразу утверждаете, что долго разбираться. Про лишний код это вообще показатель вашей безграмотности и не владения вопросом. И да, поддержка длинных имён, ессно, есть. Изучите то, что сделали до вас, не считайте себя гением, а других тупыми неумехами.
+++

У меня чтение документации и портирование fatfs на мой контроллер заняло один вечер. Доки внятные, всё расписано, объяснено, так что адаптация библиотеки достаточно проста.
Полностью согласен насчёт совета снять корону и использовать библиотеку Чана. Чтобы так написать, как написана она, ТСу нужно расти ещё минимум ...дцать лет (судя по его постам).
ТСу лишь бы хоть хватило умения грамотно написать middle-level для Чановской библиотеки. Даже это будет для него серьёзной задачей. Куда там свой лисапед колхозить!
Думать о чём то серьёзном, даже не владея основами языка программирования - просто смешно...

PS: Заодно - параллельное изучение исходников чановской библиотеки весьма полезно для начинающих. Можно чему-то научиться, если уметь думать и анализировать.

PPS: Чановскую FatFS использовал неоднократно в разных проектах на разных МК. Написана она качественно. Что нынче - весьма редкое явление.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Пн окт 28, 2024 04:47:17 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Ну, с нуля самостоятельно пройти этот путь тоже хорошо. И интересно притом. А потом пройти ещё раз, но уже с FATFS. Я так и делал, в результате стал понимать устройство FAT и работу FATFS, что всё-таки немного лучше, чем использование её без понимания. Хотя и необязательно.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Пн окт 28, 2024 06:38:35 
Первый раз сказал Мяу!

Зарегистрирован: Сб окт 23, 2021 17:05:26
Сообщений: 31
Рейтинг сообщения: 0
Как же много тут лишних слов не по теме. От них нет никакой пользы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Пн окт 28, 2024 06:44:49 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
На Ваш вопрос давно ответили. Притом, он описан во всех книжках по С/С++. Что же Вам не нравится?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Пн окт 28, 2024 11:46:49 
Сверлит текстолит когтями

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1217
Рейтинг сообщения: 0
Как же много тут лишних слов не по теме. От них нет никакой пользы.

И не будет. У вас не правильный подход, так не делают, ибо это пустая трата времени с около нулевым результатом. Повторю: меняйте подход к разработке и снимите корону.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Пн окт 28, 2024 13:21:04 
Первый раз сказал Мяу!

Зарегистрирован: Сб окт 23, 2021 17:05:26
Сообщений: 31
Рейтинг сообщения: 0
На Ваш вопрос давно ответили. Притом, он описан во всех книжках по С/С++. Что же Вам не нравится?

Я понял, через #define.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Пн окт 28, 2024 14:06:46 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Не через #define, а через явное указание адреса (смещения) в данных. #define - это всего лишь удобный способ, всего лишь директива для компилятора (препроцессора). Надеюсь, Вы в курсе, как эта кухня работает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Пн окт 28, 2024 15:07:54 
Первый раз сказал Мяу!

Зарегистрирован: Сб окт 23, 2021 17:05:26
Сообщений: 31
Рейтинг сообщения: 0
Не через #define, а через явное указание адреса (смещения) в данных. #define - это всего лишь удобный способ, всего лишь директива для компилятора (препроцессора). Надеюсь, Вы в курсе, как эта кухня работает.

Разумеется. Ещё я знаю что в Си нет процедур.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Пт ноя 08, 2024 08:43:05 
Открыл глаза

Зарегистрирован: Пт апр 22, 2011 18:41:48
Сообщений: 71
Рейтинг сообщения: 0
Размер структуры не всегда равен сумме размеров входящих в неё полей. Иногда для оптимизации компилятор производит разные выравнивания, оставляет пропуски. Особенно когда контроллер 32-битный, а поля структуры 16- или 8-битные. Для того, чтобы компилятор не оставлял пропуски между полями структуры, используйте директиву упаковки #pragma pack:
Код:
#pragma pack(push, 1)
typedef union
{
  struct
  {
    unsigned char JmpBoot[3]; // JMP на загрузчик (0xEB5890)
    unsigned char OEMName[8]; // Строка форматера ОС ("MSDOS5.0")
    unsigned short BytePerSec; // Количество байт в секторе ............ 0x00B: 512
    unsigned char SecPerClus; // Количество секторов к кластере ....... 0x00D: 8
    unsigned short RsvdSecCnt; // Всего резервных секторов (ВРВ + копия) ................. 0x00E: 2 186
    unsigned char NumFATs; // Сколько копий FAT-таблицы 0x010: 2
    unsigned short RootEntCnt; // Объектов в корневом каталоге (нуль для FAT-32)
    unsigned short TotSec16; // Всего секторов на диске (нуль для FAT-32)
    unsigned char Media; // Тип диска (F8)
    unsigned short FATSz16; // Размер таблицы FAT-16 в секторах (нуль для FAT-32)
    unsigned short SecPerTrk; // Секторов в дорожке (63)
    unsigned short NumHeads; // Всего головок Head (255)
    unsigned int HiddSec; // Cекторов перед началом раздела ....... 0x01C: 2 048
    unsigned int TotSec32; // Всего секторов на диске .............. 0x020: 15 689 728
    unsigned int FATSz32; // Размер таблицы FAT-32 в секторах ..... 0x024: 15 291
    unsigned short ExtFlags; // Флаги
    unsigned short FSVer; // Версия файловой системы
    unsigned int RootClus; // Кластер корневого каталога (смещение в блоке данных) ... 0x02C: 2
    unsigned short FSInfo; // Сектор структуры FSINFO .............. 0x030: 1
    unsigned short BkBootSec; // Сектор копии этой записи (6)
    unsigned char Reserved[12]; //
    unsigned char DrvNum; // Номер диска для INT-13h (00 или 80h)
    unsigned char Reserved1; //
    unsigned char BootSig; // Сигнатура 29h, если имеются сл.три поля
    unsigned int VolID; // Серийник тома
    unsigned char VolLabel[11]; // Строка с меткой тома по умолчанию ("NO NAME ").
    unsigned char FilSysType[8]; // Строка "FAT32 ".
    unsigned char Reserved2[420]; //
    unsigned short Signature; // Сигнатура 55AAh
  };
  unsigned char raw[512];
}FAT32_type;
#pragma pack (pop)

Попробуйте оценить размер структуры после использования упаковки.
Не знаю насчёт всех компиляторов, но Keil и GCC эту директиву поддерживают.

З.Ы. Я тут посчитал сумму размеров полей Вашей структуры - эта сумма равна 512 байт. Скорее всего, проблема в упаковке данных компилятором.

_________________
Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Записать массив в структуру.
СообщениеДобавлено: Сб ноя 09, 2024 13:25:38 
Это не хвост, это антенна

Карма: -10
Рейтинг сообщений: 171
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1488
Рейтинг сообщения: 0
Размер структуры не всегда равен сумме размеров входящих в неё полей. Иногда для оптимизации компилятор производит разные выравнивания, оставляет пропуски. Особенно когда контроллер 32-битный
Не "иногда", а "всегда" (если только явно не задана упаковка).
И не "для оптимизации", а "следуя правилам языка си/си++".
И "32-битность контроллера" тоже не имеет никакого значения - си-компиляторы 16-битных контроллеров поступают точно так же. И 64-битные компиляторы - аналогично.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 34 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y