Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 448

Arm и хранение структур в памяти

02.04.2022, 08:14. Показов 522. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться с битовыми полями, при работе с пакетами очень удобно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct strPackTx
     {
        /* First byte */
        uint16_t setpointReached:1;   // 8 bit
        uint16_t busControl:1;        // 9 bit 
        uint16_t function9:1;         // 10 bit
        uint16_t rotation:2;          // 12, 11 bit 
        uint16_t function10:1;        // 13 bit
        uint16_t profile:2;           // 15, 14 bit 
        /* Second byte */
        uint16_t startReady:1;        // 0 bit
        uint16_t operationReady:1;    // 1 bit
        uint16_t operationEnadled:1;  // 2 bit
        uint16_t fault:1;             // 3 bit
        uint16_t voltageEnable:1;     // 4 bit
        uint16_t emergencyStop:1;     // 5 bit
        uint16_t startingDisabled:1;  // 6 bit
        uint16_t warning:1;           // 7 bit
        /* Third and four  byte*/
        uint16_t speed;           // 15, 0 bit  
    /* Other four byte */    
        const uint16_t other[2] = {0, 0}; 
     };
Но если изменить бит 15 допустим packTx.speed |= (1 << 15) при отправке получиться 0 0 0 128 0 0 0 0, а не 0 0 128 0 0 0 0 0
Как от это уйти, может есть какая то деректива для хранения структуры в памяти
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.04.2022, 08:14
Ответы с готовыми решениями:

Стек, куча, хранение в памяти, динамическое выделение памяти, указатели в чем отличие?
Здравствуйте. Прочитал кучу определений но никак не пойму вообще что к чему. 1)Стек - это якобы кусок оперативной памяти который...

Хранение структур данных
Здравствуйте! Задача: имеется xml-файл, необходимо распарсить его и представить элементы в виде массива экземпляров определенного...

Хранение сложных структур данных в БД
Возникла такая проблема: У меня есть N категорий сайтов. У каждого сайта есть M частей. Каждая часть имеет K пар...

3
1 / 1 / 1
Регистрация: 22.12.2009
Сообщений: 42
02.04.2022, 11:21
Цитата Сообщение от Korbofos Посмотреть сообщение
Как от это уйти
от чего вы хотите уйти??? вы изменили старший бит старшего байта в полуслове -- и всё правильно что получили
Цитата Сообщение от Korbofos Посмотреть сообщение
0 0 0 128 0 0 0 0
-- изменен 4ый байт и он таковым и пришел.

почему у вас 0ой бит обзывается
Цитата Сообщение от Korbofos Посмотреть сообщение
// 8 bit
-- у вас какое-то неправильное представление о битфиелдс -- просто прочитайте об этом в любом учебнике по С. там читать то страница максимум
0
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 448
02.04.2022, 13:40  [ТС]
Так отправляет пакет в нужном порядке
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* Create status packege */  
      packTx.profile = packRx.profile;                               // 15, 14 bit
        if(packRx.rotation) packTx.rotation = packRx.rotation;         // 12, 11 bit
        else packTx.rotation = ROTATION_RIGHT;                         // 11 bit
        packTx.busControl = 1;                                         // 9 bit
        packTx.setpointReached = 1;                                    // 8 bit
        packTx.emergencyStop = 1;                                      // 5 bit
        packTx.voltageEnable = 1;                                      // 4 bit
        if(packRx.operationReady) 
          {
             packTx.operationEnadled = packRx.operationEnable;           // 2 bit
             packTx.operationReady = packRx.operationReady;              // 1 bit
            }
        packTx.startReady = 1;                                         // 0 bit
        if(packRx.rotation == ROTATION_LEFT) packTx.speed |= (1 << 7); // 15 bit
      packTx.speed |= __REV16(adc1.getData() * 4);                   // 14, 0 bit   
      can1.send(id + 1, (uint8_t*)&packTx, 8);                       // Send package


Добавлено через 48 минут
А биты подписаны для устройства принимающего пакет
0
1 / 1 / 1
Регистрация: 22.12.2009
Сообщений: 42
02.04.2022, 13:54
я уж подумал что седня опять 1ое апреля))
Цитата Сообщение от Korbofos Посмотреть сообщение
А биты подписаны для устройства принимающего пакет
а вы подпишите ПРАВИЛЬНО, как оно есть для вашего устройства -- устраните путаницу в программе и тогда поймете где у вас проблема
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.04.2022, 13:54
Помогаю со студенческими работами здесь

Хранение различных структур и методов
Мне нужно хранить некоторые методы, структуры и прочие данные в отдельных классах что бы как то разбавлять код. Делать его более...

Хранение информации, в массиве структур
Написать программу, реализующую хранение информации, в массиве структур и следующие действия: • добавление элемента • удаление...

Хранение структур в std::vector
доьрево времени суток, мне интересно возможно ли записать структуру в вектор. если да, то можно узать как туда записывать и чытать...

Хранение информации в виде массива структур
Здравствуйте, делаю курсовую и осталось только реализовать хранение данных в виде массива структур, подскажите пожалуйста как лучше это...

Увеличение объема RAM памяти на ARM Computer Board
приветствую всех! хочу вот обзавестись (на ebay.com) игрушкой на основе ARM9 Computer Board , но смущает 64метра оперативки, а с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru