头像-312740

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打印到串口提示,或者直接给个死循环在里面,这样就知道数组在运用时出错了。​​​

内核的任务管理

Linux内核还没看过,UCOSIII中是通过触发PendSV异常然后来进行任务切换的。具体可以看一下UCOSIII中的os_cpu_a.asm这个文件。

MDK用软件仿真时。怎么查看变量的值

首先你选的变量得是全局变量才能添加到watch窗口,添加方式可以直接右键有个add选择就行。

STM32中断行为是怎样跳转到EXTI9_5_IRQHand

我记得启动文件里面一开始有做地址映射,触发中断后根据不同的中断会调转到对应的中断函数,跳转到哪个中断函数就是地址映射那块决定的。中断函数的名字一定要和启动文件里面的函数一样,这样才能成功跳转到自己写的中断服务函数。

【问丨道】一周优质问答 2019/4W2 总第1期

赞一个,每天都来论坛逛一逛,可以学到很多不同方面的知识。