Пт июн 18, 2021 16:24:51
Пт июн 18, 2021 16:58:05
Пт июн 18, 2021 17:27:32
Пт июн 18, 2021 17:30:20
Пт июн 18, 2021 17:45:33
Пт июн 18, 2021 17:53:50
void WEAK __attribute__ ((naked)) __attribute__ ((noreturn)) reset_handler(void){
extern char _sdata; // .data section start
extern char _edata; // .data section end
extern char _sbss; // .bss section start
extern char _ebss; // .bss section end
extern char _ldata; // .data load address
char *dst = &_sdata;
char *src = &_ldata;
// enable 8-byte stack alignment to comply with AAPCS
SCB->CCR |= 0x00000200;
// copy initialized variables data
while ( dst < &_edata ) { *dst++ = *src++; }
// clear uninitialized variables
for ( dst = &_sbss; dst < &_ebss; dst++ ) { *dst = 0; }
// call main
main();
// halt
for(;;) {}
}
Пт июн 18, 2021 18:41:12
Пт июн 18, 2021 21:15:55
Сб июн 19, 2021 08:03:00
extern uint32_t _sidata[], _sdata[], _edata[], _sbss[], _ebss[];
for (volatile uint32_t *pSrc = _sidata, *pDst = _sdata; pDst != _edata; *pDst++ = *pSrc++);
for (volatile uint32_t *pDst = _sbss; pDst != _ebss; *pDst++ = 0);
Пн июн 21, 2021 10:19:32
#define TIM2 ((TIM_TypeDef *) TIM2_BASE)
Пн июн 21, 2021 10:43:51
Именно так.СКАЗОЧНИК писал(а):Правильно же я понял, что TIM2_BASE - это просто число - адерс памяти, по которму находится первый регистр для таймера2?
#define TIM2 ((TIM_TypeDef *) TIM2_BASE)
Пн июн 21, 2021 10:49:16
Пн июн 21, 2021 10:57:33
Пн июн 21, 2021 11:01:44
Пн июн 21, 2021 11:06:08
Пн июн 21, 2021 11:09:53
Пн июн 21, 2021 11:14:10
Пн июн 21, 2021 11:26:52
Пн июн 21, 2021 11:32:18
Пн июн 21, 2021 11:39:36
typedef struct
{
__IO uint32_t CR1; /*!< TIM control register 1, Address offset: 0x00 */
__IO uint32_t CR2; /*!< TIM control register 2, Address offset: 0x04 */
__IO uint32_t SMCR; /*!< TIM slave Mode Control register, Address offset: 0x08 */
...
}TIM_TypeDef;
#define TIM2 ((TIM_TypeDef *)TIM2_BASE)
#define TIM2_BASE (APB1PERIPH_BASE + 0x00000000UL)
#define APB1PERIPH_BASE PERIPH_BASE
#define PERIPH_BASE 0x40000000UL /*!< Peripheral base address in the alias region */
#define CR1 (*(__IO uint32_t*)0x40000000)
#define CR2 (*(__IO uint32_t*)0x40000004)
#define SMCR (*(__IO uint32_t*)0x40000008)
...
// Присванивание:
CR2 = 0x5555AAAA;
volatile uint32_t *ptr;
ptr = 0x40000004;
*ptr = 0x5555AAAA;