Преобразование массива
- Войдите на сайт для отправки комментариев
Вс, 23/04/2017 - 13:59
Прикрутил библиотеку nRF24L01 к своей метеостанции и возник вот такой вопрос
Библиотека для приема и передачи использует массив (TX_PLOAD_WIDTH = 32):
unsigned char rx_buf[TX_PLOAD_WIDTH],
а я значение с датчиков заношу в структуру (ведь программа должна быть понятна даже жене):
struct receiveData
{
float temp;
int lux;
int pressure;
int wind;
};
Так вот, как на вход некой рутине подать мою структуру, а она вернет то, что нужно библиотеке и наоборот?
Пссс - я начинающий!!!!!!
А какое отношение этот массив имеет к этой структуре? Массив - 32 байта, а структура сколько? Как Вы их совмещать собираетесь? Если скажете как, то тогда и разговор будет.
Пссс - я начинающий!!!!!!
Ребята, ну прекратие Вы писать эту дебильную фразу! Начинающий Вы или заканчивающий неинтересно никому, кроме Вашего психиатра.
А какое отношение этот массив имеет к этой структуре? Массив - 32 байта, а структура сколько? Как Вы их совмещать собираетесь? Если скажете как, то тогда и разговор будет.
Понятно дело, что структура (10 байт) никакого отношенияк массиву не имеет, ибо есть плод моей фантазии, но мне ее (структуру) либо нужно передать, либо значения датчиков как-то засунуть, минуя эту структуру в массив.
Ребята, ну прекратие Вы писать эту дебильную фразу! Начинающий Вы или заканчивающий неинтересно никому, кроме Вашего психиатра.
Так это я просто приколоться хотел, воскресенье же
Я тоже
Я тоже
Приколоться - это про Псссс, а вопрос по массиву - это серьезно, никаких приколов
Так ч тоже серьёзно ответил. У Вас массив 32 байта, а структура - 10. Как Вы ихсовмещать собираетесь? Что Вам нужно-то? Объясните толком. Вы хотите данные из начала (или из какого места) массива использовать как структуру? Или Вы хотите скопировать структуру в масси (в какое место)? Или чего Вам надо?
Так ч тоже серьёзно ответил. У Вас массив 32 байта, а структура - 10. Как Вы ихсовмещать собираетесь? Что Вам нужно-то? Объясните толком. Вы хотите данные из начала (или из какого места) массива использовать как структуру? Или Вы хотите скопировать структуру в масси (в какое место)? Или чего Вам надо?
1. Начало моей структуры нужно перенести в начало массива (я думал, что это очевидно)
2. Можно подойти к вопросу и так - имеем структуру в 32 байта, ее нужно преобразовать в массив с таким же размером и наоборот.
Либо еще проще, как передать данные с датчиков, которые возвращают тип float, int, int, int используя unsigned char _buf[32] ?
гуглим "union"
Ну. есть 100500 способо это сделать. Каждый чем-то удобен, а чем-то нет. Вы же секретничаете, кодов не показываете, хрен Вас разберёт что Вам советовать.
Ну, для начала это Ваш массив или он живёт в библиотеке и она им пользуется? Вы имеете к нему доступ? Можете его переописать? Или это вообще Ващ массив и Вы его сами заводите?
А так-то можно
1. положить их (массив и структуру) друг на друга, используя union.
2. описать указатель на стурктуру и присвоить ему адрес начала массива
И ещё 100498 способов.
В обоих приведённых вариантах не будет лишнего расхода памяти, массив и структура будут лежать друг на друге и занимать одну и ту же память. И преобразовывать ничего не надо вообще.
Это что было? При чём тут вопрос ТС?
А что значит 6-я строчка, какая-то рекурсия? А зачем мы создаем массив структур? А куда исчез массив unsigned char?
Это что было? При чём тут вопрос ТС?
А вы думаете, что ТС написал внятный вопрос.
Ну. есть 100500 способо это сделать. Каждый чем-то удобен, а чем-то нет. Вы же секретничаете, кодов не показываете, хрен Вас разберёт что Вам советовать.
Ну, для начала это Ваш массив или он живёт в библиотеке и она им пользуется? Вы имеете к нему доступ? Можете его переописать? Или это вообще Ващ массив и Вы его сами заводите?
Да уж какие секреты ... нате
Менять в библиотеке rx_buf или tx_buf естественно не хочется
А вы думаете, что ТС написал внятный вопрос.
Ну а что непонятно, как передать показания датчиков, используя предопределенный массив библиотеки
гуглим "union"
ок, гуглю
Ну, Вы блин, даёте, ну хоть бы подрисали где что!
Самый первый файл это Ваш файл или библиотечный? Как я понимаю - Ваш и его менять можно.
Тогда скажите мне внятно: Вам всегда передают именно эту структуру? Если да, то зачем Вы определили как TX_PLOAD_WIDTH как 32, если размер Вашей стуктуры - всего 10? Вам там достаточно 10? Или бывают другие посылки, когда нужно больше?
Ну, Вы блин, даёте, ну хоть бы подрисали где что!
Самый первый файл это Ваш файл или библиотечный? Как я понимаю - Ваш и его менять можно.
Тогда скажите мне внятно: Вам всегда передают именно эту структуру? Если да, то зачем Вы определили как TX_PLOAD_WIDTH как 32, если размер Вашей стуктуры - всего 10? Вам там достаточно 10? Или бывают другие посылки, когда нужно больше?
Ладно, мне тут подсказали использовать union, разбираюсь .... но на ваши вопросы отвечу - все три файла библиотечные, где первый из них идет как пример. Менять размер TX_PLOAD_WIDTH не нужно, т.к. это размер внутреннего буфера NRF24L01.
Блин, Вы не понимаете вопроса.
Первый файл - пример. Значит, вместо него будет Ваш, так? И массив rx_buf будет определён в Вашем файле, а не в библиотечном. Это так или нет? Ответьте же наконец - где определяется массив rx_buf - в Вашем скетче или в библиотеке?
Если я когда-нибудь получу ответ на этот вопрос (в чём я уже начал сомневаться), то возможно, я скажу Вам как обойтись без юниона и без всего остального.
Первый файл - пример. Значит, вместо него будет Ваш, так? И массив rx_buf будет определён в Вашем файле, а не в библиотечном. Это так или нет? Ответьте же наконец - где определяется массив rx_buf - в Вашем скетче или в библиотеке?
Если я когда-нибудь получу ответ на этот вопрос (в чём я уже начал сомневаться), то возможно, я скажу Вам как обойтись без юниона и без всего остального.
ЕвгенийП - ау .... зачем вы просили меня тогда показать секретные файлы, если вы их не смотрели? Естественно, массив отпределен в библиотеке .... опа, пардон ... вы хотите сказать, что первый файл, это вообще пример, который используюя два последних .... тогда, как мы видим, массив определен в примере и заполняется функцией SPI_Read_Buf(RD_RX_PLOAD, rx_buf, TX_PLOAD_WIDTH);
Хорошо, согласен, массив определен в примере, но (моя) структура с данными датчиков определена у меня в моей проге ....
Скорее вам надо написать 2 функции. 1- перевод числа в буфере в число оформленое структурой 2 - число оформленое структурой в число в буфере.
гуглим "union"
Ругается на строчку 16 - UnionTest:17: error: 'rx' does not name a type
Чего в супе не хватает?
Спасибо, который раз наступаю на эти грабли ... нет строгости, какие-то экземпляры можно создавать вне setup, какие-то нет ....
Ну, в общем, вопрос можно закрывать ... union помог .... некрасиво все это, копаться в памяти, то ли дело сишарп, пора дуню переводить на НЕТ