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

 
 
> struct и Dataflash, вопрос по Си
KostyanPro
сообщение Jul 12 2007, 09:33
Сообщение #1


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

Группа: Свой
Сообщений: 160
Регистрация: 30-01-07
Из: Minsk
Пользователь №: 24 870



Имеем структуру вида:
Код
struct  buf
        {
        {
        uint8_t a;
        uint8_t b;
        uint16_t c[16];
        uint16_t d[16];
        uint16_t e[16];
        uint16_t f[16];
        };
        };


и ее обьявление :
Код
struct     buf my_buf[16];


Вопрос: как грамотно это дело в виде массива my_buf[] положить в Dataflash и потом считать ??

Самый простой выход мне видется в использовании указателя на эту структуру, но не понятно тогда как определить sizeof и как передавать разные размеры переменных -- uint8_t и uint16_t.

з.ы компилятор carm
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KostyanPro
сообщение Jul 12 2007, 14:04
Сообщение #2


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

Группа: Свой
Сообщений: 160
Регистрация: 30-01-07
Из: Minsk
Пользователь №: 24 870



Благодарю, идея понятна и работоспособна.

Единсвенный момент для общего развития smile.gif . В приведенных примерах в первом случае идет преобразования типа (Byte * ) для указателя , во втором нет . Как правильние и почему ?? (у себя использовал с byte*)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 12 2007, 14:45
Сообщение #3


Гуру
******

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



Цитата(KostyanPro @ Jul 12 2007, 17:04) *
Как правильние и почему ?? (у себя использовал с byte*)
Как вы заметили, работает и так и так. AlexBoy объяснил почему. Оба варианта правильны, но: параметр функции byte* неявно намекает программисту, что функция ожидает от него массива(строки) байтов. Параметр же void* как бы подсказывает "да суй все что угодно, скушаю, специально так реализована". Я не считаю, что в данном случае использование параметра типа byte* и загромождение исходника явными приведениями аргумента в местах вызова к byte* способствует повышению читаемости исходника, скорее наоборот, загромождает его.
Естественно, внутри функции существет указатель типа byte* к которому и приводится параметр типа void*, но это уже скрыто в реализации.


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



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 02:28
Рейтинг@Mail.ru


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