31.01.2014, 02:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от _Артём_
|
Я высказал своё мнение. Имею право.
|
В ответ я высказал своё. На что имею не меньшее право, ведь так?
Сообщение от _Артём_
|
Я не путаюсь.
|
И всё же - путаетесь. Цитирую:
Сообщение от _Артём_
|
Но в каком-то смысле bool тоже битовая переменная: возможные значения - true/false. Битовая: 1/0.
|
Нет в Си никаких битовых переменных. На подробности уже нет времени. Может позже оно будет...
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 31.01.2014 в 02:32.
|
|
|
|
31.01.2014, 02:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от nahimovv
|
Накидайте простой пример, ... и посмотрите.
|
Либо поясните, о чём вы так тщательно умалчиваете (можно в личку, если почему-то очень нужно), либо я пошёл спать. Бывает иногда, что я не охочь до "посольских иносказаний".
__________________
There's always more than one way to skin a cat.
|
|
|
|
31.01.2014, 02:43
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Лучше спать! Завтра может и поймёте свою ошибку. А я лучше Жирика с Бузиной посмотрю.
|
|
|
|
31.01.2014, 08:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tempora
|
Речь шла о пересылке по шине, какие команды в связи с этим нужно посмотреть?
|
Сообщение от nahimovv
|
Накидайте простой пример, тот же цикл, и посмотрите.
|
Итак, смотрим...
Код:
|
...
volatile static uint8_t bArray[ARR_LEN];
volatile static uint32_t wArray[ARR_LEN];
volatile static struct {
uint8_t
b0:1,b1:1,b2:1,b3:1,
b4:1,b5:1,b6:1,b7:1;} fArray[ARR_LEN];
...
void main()
{
uint8_t i;
uint16_t s=0;
for (i=0; i‹ARR_LEN; ++i){ // byte used as bool
if (bArray[i]) ++s;
}
for (i=0; i‹ARR_LEN; ++i){ // bit field used as bool
if (fArray[i].b0) ++s;
}
for (i=0; i‹ARR_LEN; ++i){ // word used as bool
if (wArray[i]) ++s;
}
printf("Count of flags set: %d\n",s); |
Получилось такое сравнение:
Что здесь такое разное в пересылке элементов массива? На что нужно было обращать внимание?
__________________
There's always more than one way to skin a cat.
|
|
|
|
31.01.2014, 09:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 01.05.2009
Адрес: Коптево
Сообщений: 2,849
Сказал спасибо: 276
Сказали Спасибо 427 раз(а) в 274 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tempora
|
Нет в Си никаких битовых переменных.
|
А это тогда что?
Код:
|
struct
{
uint16_t Work :1;
uint16_t res1 :1;
uint16_t res2 :1;
uint16_t res3 :1;
uint16_t Error :1;
uint16_t OverVolt :1;
uint16_t OverCurrent :1;
uint16_t OverTemp :1;
uint16_t ClrOverVolt :1;
uint16_t ClrOverCurrent :1;
} bits; |
|
|
|
|
31.01.2014, 12:07
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от KBH-I
|
А это тогда что?
|
Это структура, а в самом СИ нет понятия битовых переменных, это азы!
Цитата:
|
Нет в Си никаких битовых переменных.
|
|
|
|
|
31.01.2014, 12:11
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tempora
|
Итак, смотрим...
|
Смотрите!
Код:
|
uint8_t f = 250;
uint16_t g = 250;
uint32_t h = 250;
__NOP();
while(f)
{
f--;
}
__NOP(); // 1249 cycles
while(g)
{
g--;
}
__NOP(); // 1500 cycles
while(h)
{
h--;
}
__NOP(); // 1000 cycles |
Вы что, первый раз с STM32 дело имеете?
|
|
|
Сказали "Спасибо" nahimovv
|
|
|
31.01.2014, 15:50
|
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Позволю себе лишь привести цитату из инсайдерсково руководства от Hitex
( ссылка на скачивание )
Цитата:
|
Технология Bit-Band позволяет нам осуществлять битовые манипуляции без
необходимости в специальных командах и увеличении размеров ядра Cortex. На
практике, нам необходимо вычислять адрес псевдоимени битового сегмента для
заданной ячейки памяти области SRAM или периферийных устройств. Формула
для вычисления адреса псевдоимени приведена ниже:
Адрес в области псевдоимен = Начальный адрес области псавдоимен +
смещение слова
Смещение слова = Смещение в байтах от начала битовых сегментов x 0x20 +
номер бита x 4
Все это намного проще, чем кажется на первый взгляд. Для примера
рассмотрим, как осуществляется запись в выходной регистр данных портов
ввода/вывода общего назначения (GPIO) для установки и сброса отдельных линий
ввода/вывода. Физический адрес выходного регистра Порта В 0x40010C0C. В этом
примере будем устанавливать и сбрасывать восьмой бит в слове, используя
вышеприведенную формулу.
|
Цитата:
|
Адрес слова =0x40010C0C
Начало битовых сегментов Периферийных устройств =0x40000000
Начало псевдоимен битовых сегментов Периферийных устройств =0x42000000
Байтовое смещение от начала битовых сегментов =0x40010C0C–
0x40000000=10C0C
Смещение слова =(0x10C0C x
0x20)+(8x4)=0x2181A0
Адрес псевдоимени
=0x42000000+0x2181A0=0x422181A0
Теперь мы можем создать указатель на этот адрес, использую следующую строку
языка Си:
#define PortBbit8 (*((volatile unsigned long *) 0x422181A0 ))
Этот указатель затем может использоваться для установки и сброса бита порта
ввода/вывода:
PB8 = 1; //включить светодиод
В результате чего генерируются следующие ассемблерные команды:
MOVS r0, #0x01
LDR r1, [pc, #104]
STR r0, [r1, 0x00]
Выключение светодиода:
PB = 0; //выключить светодиод
Генерируются следующие ассемблерные команды:
MOVS r0, #0x00
LDR r1, [pc, #88]
STR r0, [r1, 0x00]
Каждая из операций, установка и сброс, занимают три 16-битные команды и на
STM32, работающем с частотой 72 МГц, эти команды выполнятся за 80 нс. Любое
слово в битово сегментированной области периферийных устройств и памяти
SRAM может также напрямую адресоваться в формате слова, так что мы можем
осуществить ту же самую установку и сброс, используя традиционный подход с
операциями И и ИЛИ:
GPIOB -› ODR |= 0x00000100; //включить светодиод
LDR r0, [pc, #68]
ADDS r0, r0, #0x08
LDR r0, [r0, #0x00]
ORR r0, r0, #0x100
LDR r0, [pc, #64]
STR r0, [r1, #0xC0C]
|
Цитата:
|
GPIOB -› ODR &= ! 0x00000100; //выключить светодиод
LDR r0, [pc, #40]
ADDS r0, r0, #0x08
LDR r0, [r0, #0x00]
MOVS r0, #0x00
LDR r1, [pc, #40]
STR r0, [r1, #0xC0C]
Каждая из операций, установка и сброс, требует группы из 16 и 32-битных команд,
что потребляет как минимум 14 байт памяти для каждой операции и 180 нс
времени при той же тактовой частоте. В обычном встраиваемом приложении
очень часто используются операции установки и сброса битов в регистрах
периферийных устройств, семафоров и флагов в SRAM. И если принять во
внимание преимущества технологии битовой сегментации, то можно значительно
сократить объем кода приложения и время его исполнения. Тем более, в
заголовочных файлах STM32 уже проведены все необходимые расчеты для
использования этой технологии.
|
Не претендую на какую то истину, сам хочу разобраться.
|
|
|
|
31.01.2014, 23:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от nahimovv
|
Вы что, первый раз с STM32 дело имеете?
|
Не угадали - я на него пока только облизываюсь. Так уж сложилось, что пока не было возможности с ними поработать. Но желание и планы соответствующие есть, поэтому читаю, разбираюсь. Охота пуще неволи.
Сообщение от nahimovv
|
Смотрите!
|
Попробовал и это. Получил следующее сравнение:
но и в нём не вижу ничего, объясняющего высказанное выше косвенным образом утверждение. Так в чём-таки разница?
Сообщение от MaxiMuz79
|
Позволю себе лишь привести цитату из инсайдерсково руководства от Hitex
|
Это из другой оперы. И об этом уже ранее было сказано:
Сообщение от tempora
|
Если речь о bit-band'ах, то они здесь ни при чём.
|
Сообщение от KBH-I
|
А это тогда что?
|
А это - битовые поля.
Код:
|
K&R-›Структуры.БитовыеПоля; |
__________________
There's always more than one way to skin a cat.
|
|
|
|
01.02.2014, 00:00
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tempora
|
Так в чём-таки разница?
|
В командах. А вообще, любой МК работает лучше с той разрядностю данных, для которой он и предназначается, в случае STM32 это 32 бита.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:49.
|
|