一、单片机初始化语句?
仿照RT-Thread的自动初始化机制,写了一个自动初始化的模块,整个代码仅52字节。
好处:可以实现自动初始化,不用在外部显式地调用。
缺点:初始化逻辑较显式调用的方式模糊,容易引入BUG。
以下是对应的头文件和源文件,初始化顺序分为9级,LOADER_BOARD_EARLY_EXPORT最早,LOADER_APP_LATE_EXPORT最迟。使用方法可以看最后面的Demo。
#ifndef _LOADER__H
#define _LOADER__H
#if defined(__CC_ARM) || defined(__CLANG_ARM) /* ARM Compiler */
#define LOADER_USED __attribute__((used))
#define SECTION(x) __attribute__((section(x)))
#elif defined (__IAR_SYSTEMS_ICC__) /* for IAR Compiler */
#define LOADER_USED __root
#define SECTION(x) @ x
#elif defined (__GNUC__) /* GNU GCC Compiler */
#define LOADER_USED __attribute__((used))
#define SECTION(x) __attribute__((section(x)))
#endif
typedef int (*init_func_t)(void);
#define LOADER_EXPORT(fn, level) \
LOADER_USED const init_func_t init_##fn SECTION(".loader_fn."level) = fn
#define LOADER_BOARD_EARLY_EXPORT(fn) LOADER_EXPORT(fn, "1")
#define LOADER_BOARD_EXPORT(fn) LOADER_EXPORT(fn, "2")
#define LOADER_BOARD_LATE_EXPORT(fn) LOADER_EXPORT(fn, "3")
#define LOADER_COMPONENT_EARLY_EXPORT(fn) LOADER_EXPORT(fn, "4")
#define LOADER_COMPONENT_EXPORT(fn) LOADER_EXPORT(fn, "5")
#define LOADER_COMPONENT_LATE_EXPORT(fn) LOADER_EXPORT(fn, "6")
#define LOADER_APP_EARLY_EXPORT(fn) LOADER_EXPORT(fn, "7")
#define LOADER_APP_EXPORT(fn) LOADER_EXPORT(fn, "8")
#define LOADER_APP_LATE_EXPORT(fn) LOADER_EXPORT(fn, "9")
int LoaderExec(void);
#endif
#include "Loader.h"
static int loader_start(void)
{
return 0;
}
LOADER_EXPORT(loader_start, "0");
static int loader_end(void)
{
return 0;
}
LOADER_EXPORT(loader_end, "9.end");
int LoaderExec(void)
{
int res = 0;
const init_func_t *fn_ptr;
for (fn_ptr = &init_loader_start; fn_ptr < &init_loader_end; fn_ptr++)
{
res += (*fn_ptr)();
}
return res;
}
/* Loader Demo */
/********************** led.c **********************/
#include "Loader.h"
int led_init(void)
{
/* GPIO初始化 */
return 0;
}
LOADER_APP_EXPORT(led_init);
/********************** main.c **********************/
#include "Loader.h"
int main(void)
{
HAL_Init(); /* 初始化芯片底层,实际上该函数也可以通过loader导出 */
LoaderExec(); /* 加载Loader,里面会调用led_init */
while(1)
{
/* do something */
}
}
二、单片机中断初始化程序?
voidINT_init()//初始化{IT0=0;//外部中断0低电平触发IT1=1;//外部中断1低电平触发PX0=1;//外部中断0分配高优先级PX1=0;IE=0x85;//使能全局中断,外部中断0,外部中断1}voidEX_INT0()interrupt0//外部中断0{//添加自己的功能代码IE0=0;//清零中断标志位}voidEX_INT1()interrupt2//外部中断1{//添加自己的功能代码IE1=0;}
三、51单片机初始化函数?
51单片机的初始化函数是int( ),括号里可以设置参数也可以不设置。
四、单片机为什么要初始化?
复位电路和晶振电路属于纯硬件,不用理会,其它的需要软件做好初始化。软件的初始化一般是以下几个步骤。 如果采用的是汇编语言,一般有如下几项内容
1、设置堆栈地址:比如MOV SP, #60H。
2、设定PSW值,也就是缺省的工作寄存器区。
3、设定与定时器、中断、串口相关的特殊功能寄存器
4、设定各IO口的初始状态,比如将连接键盘的输入输出口均设为1,红外发射电路的初始状态。
5、内存中需要赋初值的寄存器赋初值,比如上电后要显示的内容最好先赋个初值。
6、打开中断允许、启动定时器(这一步也可根据具体需要放在前面或其它地方)
7、开始主程序循环 对前两项的设置可能不是必须的,但是应该成为一种好的习惯。 如果是C语言,除了第1、2项不用管,其它也一样。 如果整个系统在上电后,需要一段时间才能进入稳定状态,可在一开始加入一段循环延时程序,然后再进行其它初始化操作。
五、32单片机初始化的意义?
一般的情况下是在上电的时候初始化,还有就是程序跑飞和出现异常时也要初始化,初始化的目的就是把所有用到的标志位、变量回到你的初始值,以及引脚的分配,配置寄存器写入需要的值,像时钟的选择等。
六、51单片机初始化是什么?
1把某些变量变成初始值,比如0或者1. 2如果用到定时器需要设置定时器的工作方式及初值。 3如果用到中断需要开放相应的中断源的中断并设置优先级。 4如果用到串口需要设置串口相应工作方式及波特率等。 5其它需要预先设置的数据变量及命令字。
七、单片机如何初始化esp8266?
wifi模块的串口与单片机的串口连接,注意模块电源电压为3.3V,如果单片机电源电压与模块电压一样,可以直接连接使用,单片机编程可以考虑上电时给模块初始化(就是按照你需要的通讯方式设置模块的运行状态)就可以通过网络与单片机进行通讯了。
八、单片机初始化函数名有什么?
51单片机的初始化函数是int( ),括号里可以设置参数也可以不设置。
九、如何给单片机系统进行初始化?
你可以参考AT162单片机的DATASHEET来初始化,再根据你所要使用到的模块功能进行初始化,有些是复用口也需要初始化设置,根据IC的DATASHEET就不会错
十、51单片机程序初始化的意义?
初始化顾名思义就是初始配置,不同的使用有不同的配置. 如果只是为了做一个类似点亮一个LED的话,就不用初始化了. 它并不是程序所必要的. 你若用了定时器,设置波特率,及中断等,那你就得初始化,当然初始化并不是非要写成一个函数. 它也可以直接写到main函数的过程中,只是单独放到一个函数中便于阅读程序. 一般分四个步骤:
1)将相应的引脚配置成UART模式 2)配置和使能UART,包括配置波特率,是否使用FIF0,数据帧格式(数据长度,停止位,奇偶校验,收发数据缓冲区大小等)
3)配置中断(一般分3大类,共7种)
4)读写数据