20.10.2014, 19:32
|
|
Прописка
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Альтернативная функция у порта А вроде так.
//PA6 ------› TIM16_CH1
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_5);
Последний раз редактировалось neyvert; 20.10.2014 в 19:34.
|
|
|
|
20.10.2014, 19:55
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
#define GPIO_AF_2 ((uint8_t)0x02) /* TIM2, TIM1, EVENTOUT, TIM16, TIM17 */
#define GPIO_AF_5 ((uint8_t)0x05) /* TIM16, TIM17 */
А в даташите написан только 5... называется не верь библиотечным функциям... С 5 заработало, только остается вопрос, почему не работало с 3 таймером. Там точно альтернативный 1 (и в библиотеке и в даташите написано и оно не заработало вообще никак)
Последний раз редактировалось swat24; 20.10.2014 в 20:09.
|
|
|
|
24.10.2014, 02:19
|
|
Вид на жительство
Регистрация: 02.04.2008
Адрес: Ленинград
Сообщений: 346
Сказал спасибо: 67
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Доброго времени суток.
Никто не подскажет, как для ГЛОБАЛЬНОЙ переменной зарезервировать регистр в IAR?
С локальной нет проблем.
типо:
register unsigned short USh_Temp;
А вот с глобальной такой фокус не выходит...
Зачем? inc для регистра 1 команда. Для ОЗУ - 5.
На картинке USh_Temp - в регистре.
USh_Temp_ в ОЗУ.
Спасибо.
|
|
|
|
24.10.2014, 08:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Значит, у компилятора нет возможности использовать регистр
Он не глупее программиста
Нужно оптимизировать весь участок кода
|
|
|
|
24.10.2014, 08:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Вопрос знатокам ассемблера (я в нем вообще дуб): правильно ли я написал функцию mutex_trylock?
Код:
|
typedef uint32_t mutex_t;
...
mutex_t mutex_trylock(mutex_t *m){
uint32_t status = 0;
mutex_t old_lock = __ldrex(m); // get mutex value
// set mutex
status = __strex(MUTEX_LOCKED, m);
if(status == 0) __dmb();
else old_lock = MUTEX_LOCKED;
return old_lock;
} |
За образец взял mutex_lock, но так и не разобрался: безопасно ли вот так писать, как я сделал?
Что делает инструкция DMB? Ждет или просто "подчищает хвосты"?
Можно ли вот так писать? Если LDREX возвращает значение MUTEX_LOCKED, я все равно вызываю STREX, чтобы сбросить состояние индивидуального доступа (чтобы последующий вызов mutex_trylock не вернулся с ошибкой, если даже мьютекс будет разблокирован).
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
24.10.2014, 09:07
|
|
Вид на жительство
Регистрация: 02.04.2008
Адрес: Ленинград
Сообщений: 346
Сказал спасибо: 67
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от niXto
|
Значит, у компилятора нет возможности использовать регистр
Он не глупее программиста
Нужно оптимизировать весь участок кода
|
Странно это.
Вот если мы на ассемблере пишем, то ведь никто не мешает нам использовать регистры для глобальных переменных.
А про оптимитизацию кода, то как его оптимизировать, у меня есть переменная, которая в программе то увеличивается на 1, то уменьшается, то присваивается значение. И таких действий положим 100.
Если использовать регистр, то код будет +200 байт.
Если ОЗУ, то +1000 байт. Как оптимизировать код USh_Temp ++; Или USh_Temp = 2; ?
Последний раз редактировалось Mike121234; 24.10.2014 в 13:58.
|
|
|
|
24.10.2014, 09:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Mike121234
|
Странно это.
|
Мишаня, ты это что чудишь? Какие регистры?
А вдруг проц с аккумуляторм ? Это же С, а не асм.
|
|
|
|
24.10.2014, 09:57
|
|
Вид на жительство
Регистрация: 02.04.2008
Адрес: Ленинград
Сообщений: 346
Сказал спасибо: 67
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Boba_spb
|
Мишаня, ты это что чудишь? Какие регистры?
А вдруг проц с аккумуляторм ? Это же С, а не асм.
|
Шура, я ждал... Ключевое слова - бестолковый (сорри за флуд).
Да я конкретно про ARM, точнее про STM32.
Компилятор знает какое ядро.
Последний раз редактировалось Mike121234; 24.10.2014 в 09:59.
|
|
|
|
24.10.2014, 11:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Mike121234
|
Если использовать регистр, то код будет +200 байт.
Если ОЗУ, то +1300 байт.
|
Однако из-за одной этой переменной компилятор не сможет использовать занятый регистр в других местах программы - тех же циклах, в итоге потери памяти и быстродействия могут быть ещё больше. У стм32 не настолько много регистров, чтобы выделять один из них под глобальную переменную
|
|
|
|
24.10.2014, 11:49
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Mike121234, может стоит пересмотреть сам алгоритм, вместо ручной оптимизации.
Попытки писать на С мысля асмомом, провальные...
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:15.
|
|