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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Определение указателя
ViKo
сообщение Sep 4 2011, 17:29
Сообщение #31


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Можно использовать макроопределение такого вида (и пример применения):
Код
#define ALIAS_PTR(VarPtr, BitNum) \
  *((__IO uint32_t *) (((uint32_t) &(VarPtr) & 0xf0000000) | 0x02000000 \
  + (((uint32_t) &(VarPtr) & 0xfffff)<<5) | (BitNum<<2)))

  ALIAS_PTR(GPIOC->ODR, 8) = ~ALIAS_PTR(GPIOC->ODR, 8);

Но лучше задать атрибут для структуры из битовых полей, и Keil сам будет обращаться к битам через bit-band
Код
typedef struct {
  int  HelpEna : 1;
  int  Lang : 2;
  int  Vect : 1;
  int  Wide : 1;
  int  Scale : 2;
  int  dummy : 1;
} DPY_t __attribute__((bitband));


Go to the top of the page
 
+Quote Post
ISK2010
сообщение Sep 4 2011, 18:15
Сообщение #32


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 21-09-10
Из: г.Зеленоград
Пользователь №: 59 631



Да, у меня уже используется что-то подобное :
CODE
typedef union
{
u8 Byte;
struct
{
u8 B0:1;
u8 B1:1;
u8 B2:1;
u8 B3:1;
u8 B4:1;
u8 B5:1;
u8 B6:1;
u8 B7:1;
}Bit __attribute__((bitband));
} MB_ByteCoils;
А тут понадобилось обращаться к флагам именно по номеру . Еще в марте modbus поднял, тут в пятницу за час до момента Х решил ченить соптимизировать)
ViKo, я писал умножение на 32 и сдвиг на 5. Одинаково выходит, оптимизирует как надо.

Сообщение отредактировал ISK2010 - Sep 4 2011, 18:19
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 5 2011, 08:51
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(toweroff @ Sep 4 2011, 00:20) *
не только к Вам, а к общественности - а ведь действительно, линкер ТОЛЬКО собирает?
Формат ELF (не знаю, что там используется в IAR и Keil, но подозреваю, что именно он) поддерживает весьма ограниченные операции над адресами (на link time) - только адрес +/- константа. Никакой другой арифметики не поддерживается

Go to the top of the page
 
+Quote Post

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

 


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


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