- 博客(5)
- 收藏
- 关注
原创 可变个数参数(...)的使用
必须通过宏va_start进行初始化,使指针指向传入的可变数据的列表,通过va_arg访问列表中的元素,和使用va_end释放列表占用空间。对于某些应用场景,某些函数的功能很相近,但是传入函数的参数个数不一样,使得我们必须使用不同的函数,比如2个数求平均,或者3个数求平均,甚至其他更多参数的情况;2) va_start:初始化va_list的变量,它是一个宏定义,调用后va_list的变量指针指向传入的可变数据的列表的第一个元素。va_end宏需要一个参数,是一个va_list类型的变量。
2024-05-13 18:08:05
257
原创 CM3的SVC获取处理号简析
因此,当用户程序想要控制特定的硬件时,它就要产生一个SVC异常,然后操作系统提供的SVC异常服务例程得到执行,它再调用相关的操作系统函数,后者完成用户程序请求的服务。第三部:查找当前PC对应的EXC_Code(可执行代码大多存放在Flash中,也可能在其他存储介质中,我以内部Flash为例),此时的PC指向的还是执行SVC指令之后的指令,需要在此基础上往后倒退一个SVC指令的宽度,因为SVC指令是16位的thumb指令,所以在此PC的基础上减2个字节即为SVC指令;该指令需要一个立即数,充当系统调用代号。
2024-02-28 18:34:42
592
原创 SWD TurnAround的理解
时间标签1到8表示Target的采样点,8-9之间是TA段,时间标签9到11是Target的ACK的驱动点,时间标签12标志ACK最后1bit的结束,12-13之间是TA段,因为这是SWD写操作,时间标签13以后的都属于Host驱动IO(在CLK的下降沿驱动),Target在CLK的上升沿采样。那么请看下图,把1CLK细化成4部分(H-F-L-R),时间标签1到8表示Target的采样点,9到11是Target的ACK的驱动点。在周转期间,主机和目标都不驱动线路,线路的状态是未定义的。
2024-02-06 17:59:48
536
原创 ARM汇编LSLS指令
逻辑左移(立即数)将寄存器值左移一个立即位数,并将结果写入目标寄存器。CM3中兼容thumb和ARM指令,为thumb指令(16位)和ARM指令(32位),在CM3中汇编中常用到LSL指令,此指令用于逻辑左移。在“LSLS R1,R1,#5”这句汇编代码中,意思是将R1寄存器左移 5 位再写回到R1寄存器中。第二种情况下,因为左移5位后,R1= 0x1 0000 0000,导致溢出的那以为正好是1,所以C置位.如果 R1 = 0x8000 0000,执行完上面指令后 R1= 0, xPSR中C为0;
2023-07-28 10:45:56
4427
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人