Код: Выделить всё
NVIC_SetPriority(PendSV_IRQn, 7);Код: Выделить всё
SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;Код: Выделить всё
void PendSV_Handler(void)Код: Выделить всё
NVIC_SetPriority(PendSV_IRQn, 7);Код: Выделить всё
SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;Код: Выделить всё
void PendSV_Handler(void)Что значит "кто"? У вас же прерывание по таймеру каждые 2.5 мс, вот таймер и вызовет. Просто пока данных нет,прерывание запрещено, и обработчик вызываться не будет.А кто это прерывание вызовет?
возникла мысль, а не вызывать ли её по прерыванию. Причем приоритет задать самый низкий, чтобы не мешать другим прерываниямх.
Так есть прерывания или нет?Кхе,там у меня нет прерываний.
Код: Выделить всё
void PendSVInit(void) {
NVIC_SetPriority(PendSV_IRQn, PendSV_IRQ_priority);
}
void PendSV_Handler(void) {
profiler();
}
Код: Выделить всё
/*******************************************************************************
* Function Name: IntDefaultHandler
****************************************************************************//**
*
* This function is called for all interrupts, other than a reset that gets
* called before the system is setup.
*
* Theory:
* Any value other than zero is acceptable.
*
*******************************************************************************/
CY_ISR(IntDefaultHandler)
{
/***************************************************************************
* We must not get here. If we do, a serious problem occurs, so go into
* an infinite loop.
***************************************************************************/
КРАМ писал(а):А с какого перепуга РОНы при запуске будут что то кроме нулей содержать?
У меня максимально маленький код, поэтому наверное нули в регистрах при старте.НовыйДень писал(а): Регистры заполненными оказываются еще и потому, что до входа в main, и вообще, до первой сишной строчки выполняется весьма много действий, скрытых от нелюбопытного глаза пользователя.
Код: Выделить всё
#include "main.h"
int main(void)
{
//RCC
*((uint32_t*)(0x40023830))|=1<<3;
//ospeedr
*((uint32_t*)(0x40020C08))=0;
//moder
*((uint32_t*)(0x40020C00))|=1<<24;
GPIOD->ODR|=1<<12;
while (1)
{
}
}
Я пытаюсь понять что за командами CMSIS происходит.КРАМ писал(а): И что у вас за странный код? Вы знаете что такое CMSIS? Зачем вы пользуетесь абсолютными адресами вместо имен регистров?
Недавно купил STM32F407 Discovery, уже есть железо.КРАМ писал(а): Несложно понять, что у ТС нет железа и он смотрит в симуляторе. Именно поэтому наблюдает не рандомные значения РОНов, а нулевые.