历史上的今天
今天是:2025年03月28日(星期五)
2020年03月28日 | ARM裸机程序开发(十):C语言环境初始化
2020-03-28 来源:eefocus
Part1 栈初始化
一、满/空栈
1.1 满栈:当堆栈指针SP总是指向最后压入堆栈的数据(ARM采用)
1.2 空栈:当堆栈指针SP总是指向下一个将要放入数据的空位置
二、升/降 栈
根据入栈时,SP指针的移动方向分:若从低——》高 为升栈,从高到低为降栈(ARM使用)
三、栈帧
定义:一个函数所使用的那一部分栈,称为栈帧
栈帧的两个边界 :fp(r11) 、 sp(r13)
三、栈作用
3.1 保存局部变量
3.2 传递参数 :当传递的参数大于4个时,使用栈来传递,否则,用通用寄存器来传递
3.3 传递寄存器的值
Part2 BSS段1初始化
Part3 从汇编跳转到C
跳转方式:绝对跳转
Part4 c与汇编混合编程
一、何处使用汇编:1、效率要求高的地方;2、需要直接操作硬件(如协处理器的操作)
二、汇编中调用C:直接把C的入口指针直接赋值个PC
(C代码在单独的C文件中)
三、C中调用汇编:在汇编文件中将标号声明为.global,然后在C中直接作为函数调用即可。
(汇编代码在单独的文件中)
四、C中内嵌汇编
4.1 、格式
__asm__(
汇编语句部分
:输出部分
:输入部分
:破坏描述部分
);
//例1
void write_p15_c1(unsigned long value)
{
__asm__(
“mcr p15, 0, %0, c1, c0, 0n” @%0为一个占位参数
:
:”r”(value) @r指明为通用寄存器
);
}
//例2
usigned long read_p15_c1 (void)
{
usigned long value
__asm__(
“mrc p15, 0, %0, c1, c0, 0n” @c1中读出值送入Value中
:”=r”(value) @’=’表示只写操作数,用于输出部
:
:”memory”
);
return value;
}
4.2 、优化
在编程中,使用volatile来告诉编译器,不要对接下来的这部分代码进行优化(特别是在对硬件进行操作时)
史海拾趣
|
请教一下各位兄弟一个基础问题,cpu时钟频率和MIPS怎么理解? 我原来理解cpu的时钟频率是每秒执行的指令数 但是发现后来MIPS才是,那这样的话CPU的时钟频率的参考价值在哪里呢? 顺便问问cpu执行的指令是不是每个指令执行的时间都一样?… 查看全部问答> |
|
如题,小弟的小程序没有使用非模式, 是两个模式的对话框。 程序启动后用dialogbox调用一个对话框, 点击其他按钮后用dialogbox调用另一个对话框, 调试时发现,正常的提示框(messagebox), 如果不关闭,而是点击提示框下层的界面,messageb ...… 查看全部问答> |
|
我们一家迅速成长的高科技企业,致力于为餐饮娱乐行业提供全面信息化管理的开发及应用。公司自主研发的快易点餐饮管理系统,在界面、功能、操作、细节等各个方面都领先于国内同类产品,获得广大客户的一致称赞。 PDA开发工程师 要求 1、具有从事 ...… 查看全部问答> |
|
笔记本没串口,买了根Usb转串口,用minicom -s设置:“ttys1\"为串口1,\"ttys2\"为串口2,问题是:用usb转的那个串口算串口几呢?… 查看全部问答> |
|
我今年七月份进的公司,然后之前也没做过什么项目, 进了公司的第一个任务就是看资料,(各种芯片的) 第二个月研究以前别人写STM32的程序, 到现在还是在看别人写的程序, 组长说把他们的参数改改,然后,看看效果, 现在都是第三个月中了,… 查看全部问答> |
|
工作职责: 1、Linux及wince操作系统上应用软件开发; 2、依据项目进度与需求,能按时完成所需功能开发; 3、分析并解决软件问题,维护并改善程序质量; 4、与测试人员互相沟通合作完成项目进度; 工作要求: 1、计算机及相关专业本科以上学历; 2 ...… 查看全部问答> |
|
FPGA语言VHDL中,串口接受到一组数据,将这组数据分解成一份一份实数,再将这些实... 我这样做发现了一个问题,当未知参数设置成固定值时,程序跑起来是一点问题也没有,可是当用串口接受的数据带进去的时候,程序跑起来就不行了。串口接受的数据是没问题的,数据分解的也没有问题。 如下面的程序,当 v_pixel ,h_pixel ...… 查看全部问答> |




