1

我正在使用 MSP432 创建一个 RTOS 内核。这可能是一个加载的问题,但我的 PendSV 处理程序没有被调用。我使用内存地址 0xE000ED04 并且第一次围绕 0xE000ED04 的值是“E000 1000”,这会正确调用 PendSV 处理程序。第二次围绕内存地址 0xE000ED04 具有值“E80E 1000”。我读到这是不正确的,但我不知道如何解决这个问题。

if(OS_next != OS_curr){
     // Pend a PendSV exception using by writing 1 to PENDSVSET at bit 28
    *(uint32_t volatile *) 0xE000ED04 |= (0x1U << 28); //0x10000000; //
    //asm("isb");

这是我用来触发 PendSV 的代码。我已经解决这个问题一个星期左右了。如果需要,我会提供额外的代码我只是不想让问题变得混乱。我也在使用优先级为 0U 的 Systick 计时器,并使用 NVIC_SetPriority(PendSV_IRQn, 0xFF) 设置 PendSV 优先级;。

另一个问题是,当我单步执行代码时,我得到这个“在地址“0x40004c04”处中断,没有可用的调试信息,或者在程序代码之外。”

现在地址“0x40004c04”是 P1_P1DIR、PA_PADIR 的地址,其值为 FF41。我试图搜索这个,但我找不到它,我不确定这是否是一个问题。我不认为这可能是一个问题,因为关于输出引脚。

我被困住了,我需要帮助,这应该是我的高级项目,我无法弄清楚。谢谢你们。我可以提供额外的代码。

4

0 回答 0