小编Qno*_*ish的帖子

发生异常时如何设置回调函数?

在发生异常时,我已经停留了一段时间来设置回调.

我有这个测试代码:

void main()
{
    long * bad = (long*)0x0A000000; //Invalid address

    //When the following line gets executed 
    //it causes an error and the debugger sends me to an assembly file. 
    *bad = 123456789; 
}
Run Code Online (Sandbox Code Playgroud)

我发送的程序集文件看起来像这样(真实文件的片段):

.macro DEFAULT_ISR_HANDLER name=
  .thumb_func
  .weak \name
\name:
1: b 1b /* endless loop */
.endm

DEFAULT_ISR_HANDLER SRC_IRQHandler   /*Debugger stops on this line*/
Run Code Online (Sandbox Code Playgroud)

据我所知,DEFAULT_ISR_HANDLER是一个定义无限循环的宏.我想要做的是在C文件中定义我自己的函数,我可以在发生异常时调用,而不是调用DEFAULT_ISR_HANDLER宏中定义的whats.

我的问题是,如何在该程序集中定义一个调用特定C函数的宏?

希望我解释自己.欢迎任何有关此主题的信息或指示.

如果它是相关的我使用GCC ARM编译器v5.4_2016q3

谢谢,艾萨克

编辑

我正在使用Cortex-M3.

直到现在我才意识到我在谈论处理器异常.根据数据表,有一个包含16种异常类型的列表.

显然,它的工作方式是将所有异常类型重定向到宏,后者又调用一些拇指函数,然后调用无限循环(根据代码中的DEFAULT_ISR_HANDLER).

我想要做的是在C文件中定义我自己的函数,为方便起见,所以每次出现任何类型的处理器异常时,我都可以控制如何继续.

c assembly exception-handling cortex-m3

2
推荐指数
1
解决办法
351
查看次数

设置数组元素时出现MSVC访问冲突

我一直在努力寻找对以下代码中出现的错误的解释:

#include <stdlib.h>

int main() {
    int m=65536;
    int n=65536;
    float *a;

    a = (float *)malloc(m*n*sizeof(float));

    for (int i = 0; i < m; i++){
       for (int j = 0; j < n; j++){
            a[i*n + j] =  0;  
        }    
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么执行此程序时出现"访问冲突"错误?

内存分配是成功的,问题是在一些迭代计数的嵌套for循环中.我尝试使用较小的m&n值并且程序正常运行.

这是否意味着我内存不足?

c c++ memory-management

-1
推荐指数
1
解决办法
129
查看次数