Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: WinAVR! Отправить/принять "структуру" по UART?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Samodelkin
Есть структура:

struct {
unsigned char Status_from_pult;
unsigned int Reserv_from_pult;
}RX_Data;


struct {
unsigned char Status_for_pult;
unsigned int Voltage_duga_for_pult;
unsigned int Voltage_N1_for_pult;
unsigned int Voltage_N2_for_pult;
unsigned int Temperarura_for_pult;
}TX_Data;

Так вот, как вообще можно вычислить длину пакета данных из которых состоит эта структура (чтоб самому не считать каждый раз, когда размер структуры будет меняться для разных устройств), и как указать UARTу что эту структуру надо передать побайтово, или принять данные и положить их в эту структуру????
Отправка строки происходит просто:

USART_Transmit(TX_Data[count])

где count это номер байта. А вот со структурой такое не проходит!!!!!????

Что тут можно придумать???? Всю доступную литературу и хелпы по WinAVR я уже проштудировал, но ничего подобного не нашел!!!
Всем кто откликнется заранее огромное спасибо!!!
ReAl
Вообще говоря, это вопрос не по WinAVR как таковому, а по языку С и по организации программы.
В наиболее примитивном виде
Код
void USART_Transmit_block( void *ptr, size_t size)
{
    uint8_t *p = (uint8_t*)ptr;
    while(size--)
        USART_Transmit( *p++);
}

...
    USART_Transmit_block( &TX_Data, sizeof(TX_Data) );

В данном случае (8-битный процессор) о выравнивании можно не думать.
MALLOY2
Цитата
USART_Transmit_block( &TX_Data, sizeof(TX_Data) );


Наверное всетаки так
Код
USART_Transmit_block((unsigned char*) &TX_Data, sizeof(TX_Data) );


Извеняюсь void незаметил.
Samodelkin
Цитата(ReAl @ Dec 28 2007, 14:23) *
Вообще говоря, это вопрос не по WinAVR как таковому, а по языку С и по организации программы.
В наиболее примитивном виде
Код
void USART_Transmit_block( void *ptr, size_t size)
{
    uint8_t *p = (uint8_t*)ptr;
    while(size--)
        USART_Transmit( *p++);
}

...
    USART_Transmit_block( &TX_Data, sizeof(TX_Data) );

В данном случае (8-битный процессор) о выравнивании можно не думать.


Большое спасибо! Попробовал, все заработало!!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.