在用embest ide调试s3c44b0的时候,想在C环境下操作内部寄存器。查了很多资料可是编译始终通不过。照着书上__ASM格式还是错。后来经过一天一夜的努力,终于实现了,现在传上来大家一起研究一下~~
网上说的都是80x86的内嵌汇编,跟据那上面的格式来编译是通不过的。还有 arm-elf-gcc和arm-linux-gcc的语法也是不同的。
刚开始时在网上看到一位仁兄写的调试笔记,他说自己没有钱买仿真器,只可以烧程序。他是用ADS调试的,要想看内部寄存器(R0-R15)级必须读这些寄存器,然后通过串口来观察。但是在C的环境下操作内部寄存器是不可能的,只能在C中内嵌汇编。
我用的是embest ide ,因为给的例子都是GCC环境下的,所以我就用的这个环境在调,刚开始我把上面那位仁兄的程序COPY过来,完全编译不同,后来我一句一句的删 发现两个环境下的语法完全不同,于是我就到晚上找例子,没什么收获。下面是那位仁兄的代码,在ADS下可能适用(没有测试过)
int ReadPC(int argc, char *argv[])
{
U32 i;
U16 j,k;
__asm
{
mov i,R15
}
j=i/0x10000;
k=i%0x10000;
printf("PC Value = 0x%x /n",i);
printf("PC Value = %d - %d /n" ,j,k);
__asm
{
MRS i,CPSR
}
j=i/0x10000;
k=
ARM-elf-gcc的C语言内嵌汇编语言
最新推荐文章于 2021-12-20 09:52:11 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)