06.02.2017, 15:22
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Избавляюсь от HAL:
В файле stm32f4xx_hal.h есть конструкции типа:
Код:
|
#define __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH() do {SYSCFG-›MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\
SYSCFG-›MEMRMP |= SYSCFG_MEMRMP_MEM_MODE_0;\
}while(0); |
Зачем нужен и что дает оператор do {...} while (0)?
|
|
|
|
06.02.2017, 16:44
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Избавляюсь от HAL:
Один раз выполнит точно, а потом выйдет из цикла. Это цикл с пост-условием. Т.е. гарантировано он 1 раз выполнит код внутри скобок.
|
|
|
|
07.02.2017, 19:04
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: Избавляюсь от HAL:
Дает возможность использовать break и continue, которая возможность всё равно упущена (хотя хз что там в этих макросах).
|
|
|
|
07.02.2017, 23:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,653
Сказал спасибо: 117
Сказали Спасибо 815 раз(а) в 592 сообщении(ях)
|
Re: Избавляюсь от HAL:
Это — стандарт, позволяющий не допустить идиотизма вроде
Код:
|
#define BYDLOCODE() some_function1(); some_function2();
...
if(some_shit) BYDLOCODE(); |
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
07.02.2017, 23:54
|
|
Гражданин KAZUS.RU
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
|
Re: Избавляюсь от HAL:
Скобочек достаточно.
|
|
|
|
08.02.2017, 00:30
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Избавляюсь от HAL:
|
|
|
|
08.02.2017, 01:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,653
Сказал спасибо: 117
Сказали Спасибо 815 раз(а) в 592 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от ampy
|
Скобочек достаточно.
|
Отвечу своим комментарием из той же темы на ЛОРе.
А, вот.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
Эти 2 пользователя(ей) сказали Спасибо eddy за это сообщение:
|
|
|
08.02.2017, 04:06
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,260
Сказал спасибо: 11,170
Сказали Спасибо 3,860 раз(а) в 2,930 сообщении(ях)
|
Re: Избавляюсь от HAL:
Воистину RTFM!
Работа макроподстановок многими пропускается. А потом появляются вопросы и лезут всякие ошибки и предупреждения.
До какого-то момента как-то работает, но иногда падает, а в ядре так просто kernel panic и долгий поиск причины.
Или память начинает куда-то утекать и как назло на сервере.
Сколько времени тратится потом на поиски таких вот ошибок…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
05.04.2017, 11:58
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Избавляюсь от HAL:
UART без HAL:
Нужен пример инициализации STM32F407 без HAL.
В этом коде:
Код:
|
void STM32_UART_USART1_Init(void)
{
//Настройка тактирования
RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //Тактирование GPIO
RCC-›APB2ENR |= RCC_APB2ENR_USART1EN; //Тактирование модуля USART1
//Настройка портов
GPIOA-›AFR[1] |= 0x00000070 | 0x00000700; //Альтернативная функция
GPIOA-›MODER |= GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1; //Режим работы
GPIOA-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR10; //Скорость порта
//GPIOA-›OTYPER |= //Тип порта когда он является выходом
GPIOA-›PUPDR |= GPIO_PUPDR_PUPDR9_0 | GPIO_PUPDR_PUPDR10_0; //Подтяжка порта
USART1-›CR1 |= USART_CR1_RE | USART_CR1_TE | USART_CR1_RXNEIE; //Разрешить прием, передачу и прерывание по приему
USART1-›BRR = 0x000002D9; //Скорость передачи: 115200
NVIC_SetPriority(USART1_IRQn, 0); //Установка приоритета
NVIC_EnableIRQ(USART1_IRQn); //Разрешение прерывания
} |
в отладчике KEIL не совпадают регистры см. скриншот. CR3 - вообще нет!
А у других USART2, 3 ... все норамльно как в документации.
А в файле stm32f407xx.h нет #defain для GPIOA-›AFR?!
Последний раз редактировалось MikhailSh; 05.04.2017 в 13:31.
|
|
|
|
05.04.2017, 14:14
|
|
Гражданин KAZUS.RU
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
|
Re: Избавляюсь от HAL:
индусов не понять, можно было и инлайном:
Код:
|
inline void __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH(){
SYSCFG-›MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);
SYSCFG-›MEMRMP |= SYSCFG_MEMRMP_MEM_MODE_0;
}; |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:58.
|
|