void spisendbuf(uint8_t *massiv,uint8_t byte) { uint8_t i; uint8_t test; for(i=0;i<byte;i++) { test=*massiv[i];/* здесь в отладчике вижу что в указателе *massiv[0] лежит адрес переменной adress например, а по адресу adress лежит нужное значение 0x01 а в переменную test копируется старший байт адреса указателя *massiv(смотрю в отладчике STVD), как сделать так, чтобы в переменную test копировалась переменная adress? */ test=massiv[i];// так компилятор ругается } }
если вам нужно получить указатель на массив, но объявите test как указатель: uint8_t * test; после чего присваивайте: test=massive; доступ к элементам массива через: *(test+i), где i- номер элемента массива.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
void NRF24_WriteReg(uint8_t addr, uint8_t dt) { addr |= W_REGISTER;//включим бит записи в адрес CS_ON; HAL_SPI_Transmit(&addr,1);//отправим адрес в шину HAL_SPI_Transmit(&dt,1);//отправим данные в шину CS_OFF; } void HAL_SPI_Transmit(uint8_t * pData1, uint8_t Size) { uint8_t i; uint8_t test;
test = pData1[i];//test=0x03 test = *pData1;//test=0x03 for(i = 0; i < Size; i++) { while (SPI_GetFlagStatus(SPI_FLAG_TXE)== RESET); SPI_SendData(* pData1); //buf = pData1[0]; pData1++; while (SPI_GetFlagStatus(SPI_FLAG_BSY)== SET); while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET); //buf=SPI_ReceiveData(); } }
Вопрос, почему test = pData1[i] равно 0х03, хотя указатель pData1[i] указывает на значение 0x20? Как разыменовывать указатель чтобы в нем было 0x20? Во вложении скрин космика с ошибкой. Компилировалось все без ошибок
Вопрос, почему test = pData1[i] равно 0х03, хотя указатель pData1[i] указывает на значение 0x20?
Код в сообщении и на картинке отличается. В сообщении у вас переменная i не проинициализирована перед первым использованием. Что вы еще там исправили и где, выяснить невозможно.
Проверил в IAR этот же код работает как надо, проблема в Cosmic с указателями. Причем значение по указателю в космике записывается нормально *pData1 = test, а считывается неправильно test = *pData1
Я как-то тоже по этом поводу сначала возбудился, но потом не стал заострять. Раз вопрос все-таки возник, то присоединяюсь к нему. Очень интересно, откуда здесь хал.
Насчет проверки, как работает тот или иной неспецифический для МК код, могу посоветовать пользоваться онлайн-компиляторами. Нужно просто в гулге вбить "Online C Compiler" и выбрать подходящий. Там же можно сохранить получившийся после пробных прогонов код и использовать ссылку на него, если он в последующем окажется зачем-то нужен.
dosikus спасибо большое! Объявил volatile и все заработало ура
Использовал для stm32 куб и хал, был доволен как слон )) Нажал пару кнопок в кубе, пару строчек кода в Keil написал и все работает)) А тут куб для STM8 фигня, хала нету, указатели всякие надо уметь правильно применять и еще пришлось переделывать библиотеку с халом от STM32 на STM8, а чтобы не путаться в названиях функций оставил старые )))
Карма: 16
Рейтинг сообщений: 166
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 826 Откуда: Уже не город Белых гор
Рейтинг сообщения:0
Прямо ситуация, когда пересел с автомобиля с коробкой - автоматом на механику: "А зачем здесь третья педаль?" Учитесь нормальные языки применять, а то останетесь неучами на всю жизнь.
Добрый день. Есть у меня один весьма нубский вопрос, который, тем не менее меня все никак не отпускает. Как реализованы аппаратные интерфейсы в stm8? В датащите указано следующее
Так вот, DMA1 Controller - это что за зверь такой? Можно ли использовать их все вместе, одновременно?
У DMA-контроллера обычно несколько каналов(потоков), привязанных к другим периферийным устройствам. Все их можно использовать одновременно. Сколько их и как привязаны даташит на конкретный чип скажет.
Добрый день. Есть у меня один весьма нубский вопрос, который, тем не менее меня все никак не отпускает.
Так вот, DMA1 Controller - это что за зверь такой?
В examples SPL для L-серии, есть самый простой и самый понятный пример использования DMA, когда DMA каналом связывается АЦП с одной стороны, и ШИМ контроллер с другой. С точки зрения программирования, такой DMA канал избавляет от необходимости использования АЦП прерывания с одной единственной операцией копирования: "ШИМ_значение = АЦП_значение;"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения