ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 апреля
1096818 Топик полностью
SciFi (30.04.2021 11:42, просмотров: 389) ответил Ruslan на А как это легко и непринужденно можно сделать? )
Например: 
#include "stm32f10x.h"
#include <string.h>

void
Reset_Handler(void)
{
    // copy-init variables
    extern char __etext[], __data_start__[], __data_len[];
    memcpy(__data_start__, __etext, (int)__data_len);
    
    // zero-init variables
    extern char __bss_start__[], __bss_len[];
    memset(__bss_start__, 0, (int)__bss_len);

    extern int main();
    (void)main();
}

union intvec_elem
{
    void (*f)(void);
    void *p;
    int i;
};

extern void systick_handler(void);
extern void i2c1_handler(void);
extern void i2c1_err_handler(void);
extern void dma1ch1_handler(void);
extern void dma1ch6_handler(void);

extern char __StackTop[];

static void
trap(void)
{
    int volatile w = 1;
    while (w) ;
}

static union intvec_elem vectab[] __attribute__((used, section(".vectab"))) =
{
    { .p = __StackTop },
    { .f = Reset_Handler },
    { .f = trap }, // NMI
    { .f = trap }, // HardFault
    { .f = trap }, // MemManage
    { .f = trap }, // BusFault
    { .f = trap }, // UsageFault
    { .i = 0 },
    { .i = SVN_REVN },
    { .i = MAGIC },
    { .i = ~0 },
    { .f = trap }, // SVC
    { .f = trap }, // DebugMon
    { .i = 0 },
    { .f = trap }, // PendSV
    { .f = systick_handler },
    [16 + I2C1_EV_IRQn].f = i2c1_handler,
    [16 + I2C1_ER_IRQn].f = i2c1_err_handler,
    [16 + DMA1_Channel1_IRQn].f = dma1ch1_handler,
    [16 + DMA1_Channel6_IRQn].f = dma1ch6_handler,
};
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้