вопрос собственно такой как провернуть а ST подобную тему uint8_t array[256]; uint16_t val; uint8_t *ptr = (uint8_t*) &val; ptr[0] = array[0]; ptr[1] = array[1]; Что то я пробовал,не вышло

Комментарии: 12

  1. Z-vladimir

    Чем? В st указатель берется вроде через ADR И почему uint8? Размер указателя dword

    • Aleksandr

      размер указателя не важен,важен тип данных,ка который он указывает) С той байдой я разобрался Могу написать,если кому интерсно,как Но у меня беда сейчас глобальнее,юзаю овновскую либу mobdus, она вроде как ос скрипом работает, но начинаю писать свои функции для чтения/записи регистров и начинает мрак) Есть тут кто поможет в этом случае разгрести?))

      • Z-vladimir

        Как не важен? Размер адреса 4 байта а uint8 - один. Это в переменную 4 и более можно адрес запихать) Че за либа?

        • Aleksandr

          размер указателя зависит от машины и не важен,если ты не ассемблере пишешь) ModBus.lib Овеновская

          • Z-vladimir

            Свои функции, в смысле, чтение определенных модбас регистров?

            • Aleksandr

              Да,именно

              • Z-vladimir

                Это пока объем исполняемой программы маленький. Как только адресация перевалит за 255, так и полетит в негодность такая функция с uint8. А что именно не работает?

                • Aleksandr

                  а причем тут обьем программы? размер указателя от этого не зависит.Я надеюсь ты не путаешь размер указателя с размером типа данных,на который он указывает)

                  • Z-vladimir

                    В плк размер указателя 4 байта. Размер типа данных до указателя не причем. Пока переменные будут лежать в памяти в диапазоне адресов 00000000-000000FF, работать uint8 будет.

                    • Aleksandr

                      если обьявить ссылки на функциональные блоки либы,типа MB_RD_HOLD_REGS прямо в главном POU, и вызывать из в там же,в главном POU,то все работае,со скрипом.Но если написать функцию обертку,в которой также по ссылке вызывается тот же MB_RD_HOLD_REGS,то ничего не работает что то у нас сломанный телефон получается) ПЛК разные бывают,и указатель может быть там и 2-х байтный, и есть вообще CISK архитектурая,там с указателями вообще все хорошо.Если ты пишешь на си,паскале или плюсах,или даже в том же st,размер указателя не важен,потому что компилятор сам выставляет смещения, и еще и оптимизирует циклы,вызовы и проч. uint8_t var; //переменная 1 байт uint8_t *ptr; //указатель на 1 байт ptr = &var; //указатель на var ptr = &var + 1; //указатель на следующий байт после var

                      • Z-vladimir

                        Вот как раз для st это важно. Там по сути нет указателей как таковых. Это просто число, компилятор не учитывает что переменная может использоваться для хранение указателя или просто для хранения произвольного значения.

      • Abstrag

        Напишите, пожалуйста

Не нашли ответ?

Вам также может быть интересно