1.Keil 和 Proteus 的安装使用
keil软件的project建立和流水灯代码编辑。
proteus的文件建立和使用,这是流水灯的仿真图构建,灯的颜色是红黄绿,红黄绿,红黄。将Keil编辑的流水灯代码编译导出hex文件,再将hex文件导入51单片机里面就可以运行流水灯。
运行图:
以上就是利用Keil编辑流水灯代码运行并导出hex文件,再利用proteus软件进行仿真实验。
2.ARM开发:使用MDK编译stm32简单程序(闪烁LED)
在第一部分中已经安装了keil软件,在第二部分只用安装stm32 pack.
安装完成。
根据教程和查阅资料后编译程序。
编译完成后就进行仿真调试。
因为没用接入硬件设施,所以只能先进行程序的编译和仿真测试,但是后续可以利用proteus进行更加真实的仿真实验
Proteus的仿真
仿真之间的建立文件过程和第一部分一致。
3. 理论概念-常见嵌入式岗位面试题
1)相同点:都需要特定寄存器来完成操作,都需要考虑数据的正确性和合理性,操作需要完整指令和库函数
不同点: 一.对变量的操作是在内存(RAM)中进行,而对外部设备的操作是通过控制外设对应的寄存器来实现的。
二. 对变量进行的操作通常只涉及到单个变量,而对外部设备的操作可能会同时涉及多个寄存器。
三. 对变量进行的操作速度相对较快,而对外部设备的操作可能会有一定的延迟,需要考虑时序和时钟等问题。
四. 对变量进行的操作不涉及到硬件电路和信号,而对外部设备的操作必须要考虑硬件的特性、电路和信号等问题。
2)一. 51单片机的指令集更简单,指令执行速度更快,操作寄存器的方式更直接简单,编程更易于上手。二.51单片机的开发环境和编程工具更加成熟、稳定、易于操作,编译器、仿真器等工具的使用也更简单方便。
4.理论概念-常见嵌入式岗位面试题
register:
在函数内部定义变量时,默认是auto类型,即分配给变量内存。如果定义一个变量用register关键字,那么编译器尽可能把变量存放在CPU内部寄存器中,这样就不必通过内存寻址来访问变量,提高访问效率 。代码:
#include <stdio.h>
int main()
{
register int a=5,i;
for(i=0;i<5;i++)
{
a–;
}
return 0;
volatile:
这个是嵌入式开发必须知道的。用volatile修饰变量或地址,相当于告诉编译器这个值会随时发生变化,每次使用都要去内存中重新读取它的值。如果不用volatile,编译器会有优化操作:在同一进程中当上一次对这个地址操作的值在该进程中没有被修改时候,它会自动把上次读的数据取出来,而不是重新从这个地址取内容。在嵌入式开发中对寄存器或I/O端口的操作都要用volatile。
代码举例:比如代码
int temp, a, b;
temp = (unsigned int *)0x4004;
a = *temp;
b =*temp; C
语言编译器一般都有优化的功能,对代码进行优化,优化的结果等同如下代码:
int temp, a, b;
temp = (unsigned int *)0x4004;
a = *temp;
b = a;
; 原本程序的含义也是在两个不同的时刻读出两个不同的值,但是经过优化后的程序只能读出相同的值,这就需要使用volatile关键字。volatile unsigned int *temp;
int a, b;
temp = (volatile unsigned int *)0x4004;
a = *temp;
b = *temp;就没有发生错误的情况了