![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ARM
文章平均质量分 53
灵哎惹,凌沃敏
“任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。”
展开
-
C/C++与汇编交互总结
并且在C中调用汇编函数时可以传入参数,需要传入哪些参数和参数类型只要在extern时声明下就可;也可以有返回值,存在R0或R0-R1中,但是。如果该C函数有传递参数的,则在调用前把参数赋值到R0-R4即可;若有返回值的,则调用后从R0或者R0-R1(返回值为64位)读取即可;2.汇编当中可以引用C全局变量,也是"IMPORT"一下即可,如上例;引用进来的是该变量的地址,不是变量的值。当有返回值时,汇编函数中在退出前需要将返回值赋值给R0或R0-R1。4.C当中也可以使用汇编的标号,用法还是先。原创 2024-02-18 18:39:19 · 738 阅读 · 0 评论 -
ARM/CM3/CM4:读写内核寄存器和内核特殊寄存器
可以发现每一个函数都用到了“ldr r0,=core_res_c”这句话,这句话可以非常神奇的将core_res_c全局变量的地址传递给内核寄存器,就相当于建立了一个C和汇编直接数据传输的通道,我们就可以借助这个通道对内核寄存器进行读写了,当然这个通道的存在是借助于编译器的,所以文章第一句话就声明了和编译器的瓜葛。注:以下代码涉及内联汇编,所以跟C编译器有关,有些编译器可能会不支持(每种编译器内联汇编的形式都不一样),本代码在MDK的“defaul compiler version 6”编译器里测试通过。原创 2024-01-29 15:07:52 · 590 阅读 · 0 评论 -
关于CM3/CM4位带操作的总结
位带操作定义、优越性和使用原创 2022-12-13 15:34:49 · 1018 阅读 · 0 评论 -
关于C/C++编译时明明包含了某头文件,却仍然提示该头文件中的某类型未定义
问题原因:在A.h中包含了B.h,B.h中包含了C.h,然后C.h中包含了A.h,这样就相当于A.h自己包含了自己,然后在编译A.h时(确切的说应该是编译包含A.h的c文件时)A.h就会被展开两次,第二次展开的时候就会报错。解决:不在C.h中包含A.h,编译通过总结:其它出现这种问题的肯定都是因为在复杂的头文件包含关系中出现自己包含自己的情况...原创 2020-12-30 10:34:47 · 16728 阅读 · 3 评论 -
关于XR872编译出现问题“gcc-arm-none-eabi-4_9-2015q2/bin/arm-none-eabi-gcc: 无法执行二进制文件”
怀疑是gcc编译器问题或者版本问题,正好在网上找到个“q3”版本的,于是换了下,问题解决, 有需要请邮件:X_Q_Wei@163.com原创 2020-12-09 14:34:23 · 689 阅读 · 0 评论 -
STM32(ARM)核心知识记录
1.malloc和free函数是由C库实现,然后MDK做了适配,这就解释了为什么malloc函数知道堆区在哪里(为什么它能准确的在堆区申请内存)。2.当程序中没有使用到malloc时堆区是不起作用的,此时MDK会将其省略,也就你Heap_Size设置多大都不起作用。3.当函数的传递参数少于4个且总长度不大于16字节时,编译器会采用R0-R3来传递,不需要入栈出栈,也就不需要访问内存,提高速度。4.C的函数名能代表函数的起始地址,这点和汇编的label是一样的。...原创 2020-10-12 16:21:39 · 229 阅读 · 0 评论