реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> проблемы с байтовым инструкциями, stm32f767
Kabdim
сообщение Feb 14 2017, 07:45
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Не мог не продолжить sm.gif .
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 14 2017, 08:00
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (scifi @ Feb 14 2017, 09:08) *
Ну и да, язык не даёт никаких гарантий, что не будет использован побайтовый доступ
Да ладно? Если underlying type у битового поля объявлен как uint32_t - это как раз прямое указание использовать 32-битный доступ, а volatile в объявлении структуры - "и не фантазировать".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 14 2017, 09:33
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Alechek @ Feb 13 2017, 18:34) *
Раньше пользовал. Сейчас стараюсь использовать заголовочники под процессор в с стиле CMSIS.
Так более универсальней получается и меньше кода если несколько бит одновременно изменить надо.

Слушайте, ну незнание не освобождает и далее по тексту....
Там имеется и то и другое...

Цитата(KRS @ Feb 13 2017, 20:20) *
IAR - делает!
но у него запись битовых полей в 32 разрядные регистры не приводит к байтовым операциям!

ну да. Не сталкивался... ))


Цитата(klen @ Feb 14 2017, 01:02) *
например теперь невозможно записать в поля номера канала регистра DMAx_STREAMy.channel канал которого нет - его не будет в перечислении sm.gif

И это тоже сделано за вас, заметьте... ))
Причём я не предлагаю вам пользоваться IAR. Возьмите хидер готовый... ))
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 14 2017, 09:34
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Feb 14 2017, 11:00) *
Да ладно? Если underlying type у битового поля объявлен как uint32_t - это как раз прямое указание использовать 32-битный доступ, а volatile в объявлении структуры - "и не фантазировать".

Ну, это примерно такая же гарантия, что и переменная, объявленная как register, будет размещена в регистре laughing.gif
Можете надеяться, конечно, но стандарт на этот счёт молчит, как рыба об лёд. Может быть, я что-то пропустил, тогда прошу привести цитату из стандарта.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 14 2017, 09:38
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Сергей Борщ @ Feb 14 2017, 11:58) *
Просто я в свое время тоже пытался решить эту проблему, но рабочего решения так и не нашел. Понял, что это реализуемо через гору писанины на шаблонах, но на такой подвиг я пока не готов.

Напомню про моё решение этой проблемы: вот.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 14 2017, 09:40
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Вот хидер на 407 камень
вот первое попавшиеся ...
Код
typedef struct
{
  __IO uint32_t              MCR;                 /*!< CAN master control register,         Address offset: 0x00          */
  __IO uint32_t              MSR;                 /*!< CAN master status register,          Address offset: 0x04          */
  __IO uint32_t              TSR;                 /*!< CAN transmit status register,        Address offset: 0x08          */
  __IO uint32_t              RF0R;                /*!< CAN receive FIFO 0 register,         Address offset: 0x0C          */
  __IO uint32_t              RF1R;                /*!< CAN receive FIFO 1 register,         Address offset: 0x10          */
  __IO uint32_t              IER;                 /*!< CAN interrupt enable register,       Address offset: 0x14          */
  __IO uint32_t              ESR;                 /*!< CAN error status register,           Address offset: 0x18          */
  __IO uint32_t              BTR;                 /*!< CAN bit timing register,             Address offset: 0x1C          */
  uint32_t                   RESERVED0[88];       /*!< Reserved, 0x020 - 0x17F                                            */
  CAN_TxMailBox_TypeDef      sTxMailBox[3];       /*!< CAN Tx MailBox,                      Address offset: 0x180 - 0x1AC */
  CAN_FIFOMailBox_TypeDef    sFIFOMailBox[2];     /*!< CAN FIFO MailBox,                    Address offset: 0x1B0 - 0x1CC */
  uint32_t                   RESERVED1[12];       /*!< Reserved, 0x1D0 - 0x1FF                                            */
  __IO uint32_t              FMR;                 /*!< CAN filter master register,          Address offset: 0x200         */
  __IO uint32_t              FM1R;                /*!< CAN filter mode register,            Address offset: 0x204         */
  uint32_t                   RESERVED2;           /*!< Reserved, 0x208                                                    */
  __IO uint32_t              FS1R;                /*!< CAN filter scale register,           Address offset: 0x20C         */
  uint32_t                   RESERVED3;           /*!< Reserved, 0x210                                                    */
  __IO uint32_t              FFA1R;               /*!< CAN filter FIFO assignment register, Address offset: 0x214         */
  uint32_t                   RESERVED4;           /*!< Reserved, 0x218                                                    */
  __IO uint32_t              FA1R;                /*!< CAN filter activation register,      Address offset: 0x21C         */
  uint32_t                   RESERVED5[8];        /*!< Reserved, 0x220-0x23F                                              */
  CAN_FilterRegister_TypeDef sFilterRegister[28]; /*!< CAN Filter Register,                 Address offset: 0x240-0x31C   */
} CAN_TypeDef;

Ну и далее по тексту для любителей якобы CMSIS
Код
/*!<CAN control and status registers */
/*******************  Bit definition for CAN_MCR register  ********************/
#define  CAN_MCR_INRQ                        ((uint32_t)0x00000001)        /*!<Initialization Request */
#define  CAN_MCR_SLEEP                       ((uint32_t)0x00000002)        /*!<Sleep Mode Request */
#define  CAN_MCR_TXFP                        ((uint32_t)0x00000004)        /*!<Transmit FIFO Priority */
#define  CAN_MCR_RFLM                        ((uint32_t)0x00000008)        /*!<Receive FIFO Locked Mode */
#define  CAN_MCR_NART                        ((uint32_t)0x00000010)        /*!<No Automatic Retransmission */
#define  CAN_MCR_AWUM                        ((uint32_t)0x00000020)        /*!<Automatic Wakeup Mode */
#define  CAN_MCR_ABOM                        ((uint32_t)0x00000040)        /*!<Automatic Bus-Off Management */
#define  CAN_MCR_TTCM                        ((uint32_t)0x00000080)        /*!<Time Triggered Communication Mode */
#define  CAN_MCR_RESET                       ((uint32_t)0x00008000)        /*!<bxCAN software master reset */
#define  CAN_MCR_DBF                         ((uint32_t)0x00010000)        /*!<bxCAN Debug freeze */
/*******************  Bit definition for CAN_MSR register  ********************/
#define  CAN_MSR_INAK                        ((uint32_t)0x0001)            /*!<Initialization Acknowledge */
#define  CAN_MSR_SLAK                        ((uint32_t)0x0002)            /*!<Sleep Acknowledge */
#define  CAN_MSR_ERRI                        ((uint32_t)0x0004)            /*!<Error Interrupt */
#define  CAN_MSR_WKUI                        ((uint32_t)0x0008)            /*!<Wakeup Interrupt */
#define  CAN_MSR_SLAKI                       ((uint32_t)0x0010)            /*!<Sleep Acknowledge Interrupt */
#define  CAN_MSR_TXM                         ((uint32_t)0x0100)            /*!<Transmit Mode */
#define  CAN_MSR_RXM                         ((uint32_t)0x0200)            /*!<Receive Mode */
#define  CAN_MSR_SAMP                        ((uint32_t)0x0400)            /*!<Last Sample Point */
#define  CAN_MSR_RX                          ((uint32_t)0x0800)            /*!<CAN Rx Signal */

Ну и так далее ....
Обращаю внимание, что в битовой маске сразу указаны и устройство и регистры...
Прикрепленные файлы
Прикрепленный файл  stm32f407xx.zip ( 59.82 килобайт ) Кол-во скачиваний: 3
 
Go to the top of the page
 
+Quote Post
Forger
сообщение Feb 14 2017, 09:45
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(SasaVitebsk @ Feb 14 2017, 12:40) *
Вот хидер на 407 камень
Все вполне наглядно и читаемо. Сложно что-то напутать.
И главное - что это уже написано и проверено самим производителем проца!
Грех не воспользоваться такой халявой wink.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 14 2017, 09:55
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AHTOXA @ Feb 14 2017, 11:38) *
Напомню про моё решение этой проблемы: вот.
Я его помню, но это "гора писанины на шаблонах".

QUOTE (SasaVitebsk @ Feb 14 2017, 11:40) *
Обращаю внимание, что в битовой маске сразу указаны и устройство и регистры...
Что не мешает ее записать не туда. Вот чесслово, сам у себя не так давно подобную описку нашел.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alechek
сообщение Feb 14 2017, 14:07
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(SasaVitebsk @ Feb 14 2017, 14:33) *
Слушайте, ну незнание не освобождает и далее по тексту....
Там имеется и то и другое...


Цитата(SasaVitebsk @ Feb 14 2017, 14:40) *
Вот хидер на 407 камень
вот первое попавшиеся ...

И где такое интересно дают?
IAR 7.7
inc/ST

файлов stm*.h вообще не наблюдаю
есть только вида iostm*.h
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 14 2017, 14:20
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Alechek @ Feb 14 2017, 17:07) *
И где такое интересно дают?

В интернете: тынц.
Go to the top of the page
 
+Quote Post
Alechek
сообщение Feb 14 2017, 14:53
Сообщение #26


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(scifi @ Feb 14 2017, 19:20) *
В интернете: тынц.

В интернете это понятно. Там речь про IAR шла.
Go to the top of the page
 
+Quote Post
Forger
сообщение Feb 14 2017, 15:06
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Alechek @ Feb 14 2017, 17:53) *
речь про IAR шла.

Неужели в IAR не С/C++, а что-то свое, нестандартное? sm.gif


оффффф. В свое время пытался по-юзать IAR, он мне оказался жутко нестандатной IDE (вот уж стоило где изобретать лисапет), поплевался, поматерился и в итоге удалил ... не жалею ни разу )))
Keil тоже не конфетка, но под нетолстые ARMы это пока что самое нормальное с привычным интерфейсом (имхо!), особенно после кроссворкса ...


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Alechek
сообщение Feb 15 2017, 04:18
Сообщение #28


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(Forger @ Feb 14 2017, 20:06) *
Неужели в IAR не С/C++, а что-то свое, нестандартное? sm.gif


Примерно так
Код
/* Clock configuration register (RCC_CFGR) */
typedef struct {
  __REG32  SW             : 2;
  __REG32  SWS            : 2;
  __REG32  HPRE           : 4;
  __REG32  PPRE1          : 3;
  __REG32  PPRE2          : 3;
  __REG32  ADC_PRE        : 2;
  __REG32  PLLSRC         : 1;
  __REG32  PLLXTPRE       : 1;
  __REG32  PLLMUL         : 4;
  __REG32  USBPRE         : 1;
  __REG32                 : 1;
  __REG32  MCO            : 3;
  __REG32                 : 5;
} __rcc_cfgr_bits;

....
__IO_REG32_BIT(RCC_CFGR,          0x40021004,__READ_WRITE ,__rcc_cfgr_bits);


Использовать как
Код
  RCC_CFGR_bit.PLLMUL = 2;
Go to the top of the page
 
+Quote Post
Forger
сообщение Feb 15 2017, 07:00
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Alechek @ Feb 15 2017, 07:18) *
Примерно так..

Я имел ввиду скормить ИАРу стандартные h файлы (от производителя чипа), которые должен понимать даже самый чахлый С компилятор.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
klen
сообщение Feb 16 2017, 09:49
Сообщение #30


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



все коллеги были правы но меня не поняли. я чуть позже выложу для обозрения велосипед и тогда можно будет кинуть в меня какахой предметно. наверно будет очень похоже на иар
естественно для мня только С++, С - это тоже самое на выходе кодогенератора но куча фатальных граблей для программиста. полагаю что если не писать код достаточно большой который пишут >10 человек и сложный то этого не понять потому что не заметить.

почему не использую иар? а у меня есть деньги на него?
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th August 2025 - 22:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.0155 секунд с 7
ELECTRONIX ©2004-2016