soloriens
获得 8 次赞
帮助过9人
这里我用的是断言函数assert_param()来实现。用宏定义规定数组的长度:typedef enum{ ARRAY_HEAD = 0 ARRAY_TAIL = 19}ARRAY_TypeDef;#define IS_ARRAY_SUBscript(SUBscript) (((SUBscript)>=ARRAY_HEAD) && ((SUBscript)<= ARRAY_TAIL))/* 定义时 */uint16_t array[20]={0}; /* 我们直接设置20,这里肯定越界了 */ subscript = 20; /* 使用时这里subscript可以作为参数传递进来 */ assert_param(IS_ARRAY_SUBscript(subscript));执行到assert_param()时,由于subscript不在0~19之间,所以程序会去到void assert_failed(uint8_t *file uint32_t line);我们可以在assert_failed函数中用Printf打印到串口提示,或者直接给个死循环在里面,这样就知道数组在运用时出错了。
我记得启动文件里面一开始有做地址映射,触发中断后根据不同的中断会调转到对应的中断函数,跳转到哪个中断函数就是地址映射那块决定的。中断函数的名字一定要和启动文件里面的函数一样,这样才能成功跳转到自己写的中断服务函数。