LINUX.ORG.RU

История изменений

Исправление COKPOWEHEU, (текущая версия) :

#include "stm32f10x.h"
#include "pinmacro.h"

#define StackTop  ((uint32_t)(0x20000000 + 20*1024))
#define LED_Y B,5,1,GPIO_PP50
#define LED_G B,6,1,GPIO_PP50
#define LED_R B,7,1,GPIO_PP50
static void Reset_Handler(void);

__attribute__((used,section(".isr_vector")))
void (*const g_pfnVectors[])(void) = {
  [0]=(void*)StackTop,
  [1]=Reset_Handler,
};

static void Reset_Handler(void){
  RCC->APB2ENR = RCC_APB2ENR_IOPBEN;
  //GPIO_config(LED_G);
  GPIOB->CRL = (0b0011 << (4*6));
  
  while(1){
    //GPO_T(LED_G);
    GPIOB->ODR ^= (1<<6);
    for(int32_t i=(1<<20); i; i--){asm("");}
  }
}
$ arm-none-eabi-gcc src/main.c -nostartfiles -mthumb -mcpu=cortex-m3 -Os -Ilib -Ilib/include/core -Ilib/include -DSTM32F10X_MD -Tlib/stm32f103c8_flash.ld -o res.elf
$ arm-none-eabi-size res.elf 
   text    data     bss     dec     hex filename
     48       0       0      48      30 res.elf

Уже не так очевидно, не правда ли?

Исходная версия COKPOWEHEU, :

#include "stm32f10x.h"
#include "pinmacro.h"

#define StackTop  ((uint32_t)(0x20000000 + 20*1024))
#define LED_Y B,5,1,GPIO_PP50
#define LED_G B,6,1,GPIO_PP50
#define LED_R B,7,1,GPIO_PP50
static void Reset_Handler(void);

__attribute__((used,section(".isr_vector")))
void (*const g_pfnVectors[])(void) = {
  [0]=(void*)StackTop,
  [1]=Reset_Handler,
};

static void Reset_Handler(void){
  RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
  //GPIO_config(LED_G);
  GPIOB->CRL = (0b0011 << (4*6));
  
  while(1){
    //GPO_T(LED_G);
    GPIOB->ODR ^= (1<<6);
    for(int32_t i=(1<<20); i; i--){asm("");}
  }
}
$ arm-none-eabi-gcc src/main.c -nostartfiles -mthumb -mcpu=cortex-m3 -Os -Ilib -Ilib/include/core -Ilib/include -DSTM32F10X_MD -Tlib/stm32f103c8_flash.ld -o res.elf
$ arm-none-eabi-size res.elf 
   text    data     bss     dec     hex filename
     52       0       0      52      34 res.elf

Уже не так очевидно, не правда ли?