www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 10 Ное 2025, 05:31

Часовете са според зоната UTC + 2 часа




Напиши нова тема Отговори на тема  [ 6 мнения ] 
Автор Съобщение
 Заглавие: CMSIS
МнениеПубликувано на: 22 Юли 2025, 11:32 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
Кой вариант? Първият е видим отдалеко, другите два са по-къси и по-бързи.
Код за потвърждение:
  // Program Size: Code=676 RO-data=208 RW-data=0 ZI-data=1632
  // GPIOA->MODER &= ~GPIO_MODER_MODE3_Msk;  // PA3 general purpose output mode
  // GPIOA->MODER |= GPIO_MODER_MODE3_0;

  // Program Size: Code=672 RO-data=208 RW-data=0 ZI-data=1632
  // GPIOA->MODER = (GPIOA->MODER & ~GPIO_MODER_MODE3_Msk) | GPIO_MODER_MODE3_0;  // PA3 general purpose output mode

  // Program Size: Code=672 RO-data=208 RW-data=0 ZI-data=1632 
  // GPIOA->MODER = (GPIOA->MODER & ~GPIO_MODER_MODE3_Msk) | (0b01 << GPIO_MODER_MODE3_Pos);  // PA3 general purpose output mode

Из нета всеки пише както му падне :smile.


Върнете се в началото
 Профил  
 
 Заглавие: Re: CMSIS
МнениеПубликувано на: 23 Юли 2025, 09:05 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
Друг извод: оптимизаторът (както винаги) премахва разликите и не важно как е написан реда :smile .
Винаги включвам оптимизатора на -Oz, понякога на -Ofast, никогда на -O0 (само при конфликт и то докато е намерена причината).

Код за потвърждение:
  // -O0 -> Program Size: Code=676 RO-data=208 RW-data=0 ZI-data=1632
  // -Oz -> Program Size: Code=464 RO-data=208 RW-data=0 ZI-data=1632 
  // GPIOA->MODER &= ~GPIO_MODER_MODE3_Msk;  // PA3 general purpose output mode
  // GPIOA->MODER |= GPIO_MODER_MODE3_0;

  // -O0 -> Program Size: Code=672 RO-data=208 RW-data=0 ZI-data=1632
  // -Oz -> Program Size: Code=464 RO-data=208 RW-data=0 ZI-data=1632 
  // GPIOA->MODER = (GPIOA->MODER & ~GPIO_MODER_MODE3_Msk) | GPIO_MODER_MODE3_0;  // PA3 general purpose output mode

  // -O0 -> Program Size: Code=672 RO-data=208 RW-data=0 ZI-data=1632
  // -Oz -> Program Size: Code=464 RO-data=208 RW-data=0 ZI-data=1632 
  // GPIOA->MODER = (GPIOA->MODER & ~GPIO_MODER_MODE3_Msk) | (0b01 << GPIO_MODER_MODE3_Pos);  // PA3 general purpose output mode

Първият вариант ми е най-видим отдалеко.


Върнете се в началото
 Профил  
 
 Заглавие: Re: CMSIS
МнениеПубликувано на: 23 Юли 2025, 13:00 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
Не можах да разбера причината за несъответствията в имената на регистрите и в заглавните файлове с еднаква (или почти еднаква) функционалност. Направено е умишлено или не това?

И следствие: "blik" (във всичките му форми и начини: с просто забавяне, с таймер, със системен таймер, с друго) на STM32, тип F и G се превърна в безкрайно редактиране на програми от предния ден - от тип (G) -> за тип (F) ... с четене на двата pdf-а паралелно отворени, сравняване, ново мислене ... Мъка.


Прикачени файлове:
Untitled-1.jpg
Untitled-1.jpg [ 99.71 KiB | Прегледано 9305 пъти ]
Върнете се в началото
 Профил  
 
 Заглавие: Re: CMSIS
МнениеПубликувано на: 24 Юли 2025, 09:25 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
// LED blink, STM32F103C8T6, PC13
Код за потвърждение:
#include "stm32f10x.h"
#include <stdint.h>
#include <stdbool.h>

void GPIO_init(void);
void delay_ms(volatile uint32_t n);

void GPIO_init(void) {
  RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;  // GPIOC clock enable
  GPIOC->CRH &= ~GPIO_CRH_CNF13;       // PC13 general purpose output push-pull
  GPIOC->CRH |= (GPIO_CRH_MODE13_0 | GPIO_CRH_MODE13_1);  // PC13 output mode, max speed 50 MHz
}

void delay_ms(volatile uint32_t n) {
  n *= (SystemCoreClock / 1000000);
  n *= 111;

  while(n--);
}

int main(void) {
  GPIO_init();

  while(1) {
    GPIOC->BSRR = GPIO_BSRR_BS13;  // PC13 set
    delay_ms(500);
    GPIOC->BSRR = GPIO_BSRR_BR13;  // PC13 reset
    delay_ms(500);
  }
}


STM32F103C8T6 в Keil
Закъсненията: с "нищонеправене", много пъти :yes
донастройвано с n през логическия анализатор.


Прикачени файлове:
stm32f103c8t6_blink_hse_pll.zip [70.22 KiB]
165 пъти
500ms_500ms.jpg
500ms_500ms.jpg [ 110.78 KiB | Прегледано 9303 пъти ]
Върнете се в началото
 Профил  
 
 Заглавие: Re: CMSIS
МнениеПубликувано на: 24 Юли 2025, 09:38 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
Скорост без паузите, bit banging
Честотомер към PC13
Код за потвърждение:
    // 8.0041777 MHz
    // GPIOC->BSRR = GPIO_BSRR_BS13;  // PC13 set
    // GPIOC->BSRR = GPIO_BSRR_BR13;  // PC13 reset
      
    // 12.009062 MHz
    // GPIOC->BSRR = GPIO_BRR_BR13;  // PC13 set
    // GPIOC->BRR = GPIO_BRR_BR13;   // PC13 reset

---
FLASH Latency = 1, честота: 14.443942 MHz
ред 1017 във файл system_stm32f10x.c
Честота: 14.443942 MHz
Код за потвърждение:
   /* Flash 2 wait state */
   FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
   // FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; 
   FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;   

Прикачени файлове:
flash_latency.jpg
flash_latency.jpg [ 119.96 KiB | Прегледано 9303 пъти ]

---
Оптимизация по скорост: -Ofast и FLASH Latency = 1
Честота: 16.001178 MHz


Върнете се в началото
 Профил  
 
 Заглавие: Re: CMSIS
МнениеПубликувано на: 02 Авг 2025, 08:52 
Offline
Аватар

Регистриран на: 07 Дек 2006, 17:24
Мнения: 1618
Местоположение: Силистра
HAL vs CMSIS
Сравнение към една и съща кпострукция: прост честотомер с STM32F030F4P6 + OLED 0.91".

Пренесох си метода от HAL и към CMSIS. Сравнението си заслужаваше! :good

STM32CubeIDE, HAL, RAM: 56%, FLASH: 74% (оптимизация по обем в паметта -Oz)
Код за потвърждение:
arm-none-eabi-objcopy  -O binary stm32f030f4p6.elf  "stm32f030f4p6.bin"
   text      data       bss       dec       hex   filename
  11748       432      1872     14052      36e4   stm32f030f4p6.elf

Keil, CMSIS (Optimization: -Oz image size)
Код за потвърждение:
Rebuild target 'STM32F030' ...
Program Size: Code=3568 RO-data=224 RW-data=420 ZI-data=1640


Сложно е, но с упоритост и с малки стъпки продължаваме с CMSIS :smt045 . Струва си.


Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 6 мнения ] 

Часовете са според зоната UTC + 2 часа


Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
cron
Форумът се задвижва от phpBB® Forum Software © phpBB Group
Преведено от yarnaudov.com