ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
26 марта
1504886 Топик полностью
SciFi (10.03.2025 10:16, просмотров: 139) ответил SciFi на Вот моё творчество:
Версия 3. Дышит в железе. Выяснилось, что проц спотыкается на чтении слова без выравнивания, отсюда ".align 2". 
#include "ch32v00x.h"
#include <string.h>
static void __attribute__((used)) start2(void) { extern char _data_lma[], _data_vma[], _edata[]; memcpy(_data_vma, _data_lma, _edata - _data_vma); extern char _sbss[], _ebss[]; memset(_sbss, 0, _ebss - _sbss); extern int main(void); main(); }
void __attribute__((naked, section(".init"))) _start(void) { __asm volatile( " j 3f \n\t" " .align 2 \n\t" "1: .word __global_pointer$ \n\t" // literal pool of two constants "2: .word _eusrstack \n\t" // keeps compiler from replacing them with registers "3: lw gp, 1b \n\t" // load gp " lw sp, 2b \n\t" // load sp " li t0, 0x88 \n\t" // enable " csrw mstatus, t0 \n\t" // interrupts " csrwi 0x804, 2 \n\t" // nesting on, HPE off " csrwi mtvec, 3 \n\t" // table of vector addresses based at 0 " la t0, start2 \n\t" // exit " csrw mepc, t0 \n\t" // exception " mret \n\t"); // and proceed to start2 }
static void __attribute__((interrupt)) trap(void) { int volatile w = 1; while (w) ; }
//extern void SysTick_Handler(void);
static void (*const vectab[])(void) __attribute__((used, section(".init.vectors"))) = { [-1 + NonMaskableInt_IRQn] = trap, [-1 + HardFault_IRQn ] = trap, // [-1 + SysTick_IRQn ] = SysTick_Handler, };
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้