mantech 46 30 ноября, 2020 Опубликовано 30 ноября, 2020 (изменено) · Жалоба 8 минут назад, AlexKai сказал: чему там 10 тактов выполняться? и откуда там нопам взяться? это всего пара инструкций. В ассемблерном виде посмотрите, сколько там и чего или сами на асме напишите... Nop-ам там действительно делать нечего (в цикле, в смысле).. Изменено 30 ноября, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба 14 минут назад, AlexKai сказал: каким образом? чему там 10 тактов выполняться? и откуда там нопам взяться? это всего пара инструкций. Листинг - в студию! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKai 0 30 ноября, 2020 Опубликовано 30 ноября, 2020 (изменено) · Жалоба RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); if(RCC_WaitForHSEStartUp() == ERROR) Fail("HSE not started"); RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); while(RCC_GetSYSCLKSource() != 0x04); RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div4); RCC_PCLK2Config(RCC_HCLK_Div2); RCC_HSICmd(DISABLE); FLASH->ACR |= FLASH_ACR_LATENCY_4WS; RCC_PLLConfig(RCC_PLLSource_HSE, 8, 168, 2, 4); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08); void Delay(__IO uint32_t nCount) { while(nCount--); } while(1) { GPIO_SetBits(GPIOB, GPIO_Pin_15); Delay(1000000); GPIO_ResetBits(GPIOB, GPIO_Pin_15); Delay(16000000); } диод мигает примерно раз в секунду Изменено 30 ноября, 2020 пользователем AlexKai добавлено Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба Во первых, листинг ассемблерных команд нужен. Во вторых, о, GPIO_SetBits, Cube привет! Там у вас все 20 тактов должно быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKai 0 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба я с AVR-ов перебираюсь) там такой код вопросов не вызывает Только что, ViKo сказал: Во первых, листинг ассемблерных команд нужен. Во вторых, о, GPIO_SetBits, Cube привет! Там у вас все 20 тактов должно быть. кокос асмы генерит? я не нашел 20 тактов на вкл/выкл диода это не проблема Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба 47 минут назад, AlexKai сказал: __IO uint32_t nCount Это значит, что при каждом обращении к nCount она читается из памяти, над ней совершаются операции и она пишется в память. То есть, на один цикл она (читается из SRAM в РОН, декрементируется в РОН, записывается в SRAM, читается из SRAM, сравнивается с нулём). 10 тактов как нефиг делать. Вот так будет значительно быстрее. С включенной оптимизацией, само собой. void Delay(uint32_t nCount) { while(nCount--) __NOP(); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 3 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба ..т.с. думал что Си выполняется в режиме одна команда за такт? Добро пожаловать в реальный мир, представляю ваше разочарование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба 16 minutes ago, VladislavS said: Это значит, что при каждом обращении к nCount она читается из памяти, над ней совершаются операции и она пишется в память. GCC, например, такой ерундой не занимается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба 1 минуту назад, aaarrr сказал: GCC, например, такой ерундой не занимается. Интересно, а как же он на __IO реагирует? Если бы это было так, то работа с регистрами периферии на С была бы невозможна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба 5 minutes ago, VladislavS said: Если бы это было так, то работа с регистрами периферии на С была бы невозможна. Ну а где в этом цикле что-то похожее на работу с регистрами периферии? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKai 0 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба 1 минуту назад, aaarrr сказал: Ну а где в этом цикле что-то похожее на работу с регистрами? полагаю по хорошему перед циклом переменная должна копироваться в регистр и цикл уже работать с регистром Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба 3 минуты назад, aaarrr сказал: Ну а где в этом цикле что-то похожее на работу с регистрами? __IO uint32_t nCount 1 минуту назад, AlexKai сказал: полагаю по хорошему перед циклом переменная должна копироваться в регистр и цикл уже работать с регистром Уберите __IO, так и будет. Только тогда пустой цикл без __NOP() оптимизатор выкинет к чертям собачим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба И что? nCount адресуется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба aaarrr, посмотрите как определены регистры периферии в заголовочном файле микроконтроллера и не спорьте. А ещё лучше посмотрите листинг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 30 ноября, 2020 Опубликовано 30 ноября, 2020 · Жалоба Just now, VladislavS said: посмотрите как определены регистры в заголовочном файле микроконтроллера и не спорьте. Вот сами и посмотрите - у них есть одно очень важное отличие от nCount. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться