lk_init_struct结构

lk/include/lk/init.h
typedef void (*lk_init_hook)(uint level);
struct lk_init_struct {
    uint level;
    uint flags;
    lk_init_hook hook;
    const char *name;
};

#define LK_INIT_HOOK_FLAGS(_name, _hook, _level, _flags) \     const struct lk_init_struct _init_struct_##_name __ALIGNED(sizeof(void *)) __SECTION(".lk_init") = { \         .level = _level, \         .flags = _flags, \         .hook = _hook, \         .name = #_name, \     };

#define LK_INIT_HOOK(_name, _hook, _level) \     LK_INIT_HOOK_FLAGS(_name, _hook, _level, LK_INIT_FLAG_PRIMARY_CPU)

 
示例:
/* secondary cpu initialize the timer just before the kernel starts with interrupts enabled */
LK_INIT_HOOK_FLAGS(arm_cortex_a9_timer_init_percpu,
                   arm_cortex_a9_timer_init_percpu,
                   LK_INIT_LEVEL_THREADING - 1, LK_INIT_FLAG_SECONDARY_CPUS);
/* secondary cpu initialize the timer just before the kernel starts with interrupts enabled */
LK_INIT_HOOK_FLAGS(arm_generic_timer_init_secondary_cpu,
                   arm_generic_timer_init_secondary_cpu,
                   LK_INIT_LEVEL_THREADING - 1, LK_INIT_FLAG_SECONDARY_CPUS);
 
LK_INIT_HOOK_FLAGS(arm_generic_timer_resume_cpu, arm_generic_timer_resume_cpu,
                   LK_INIT_LEVEL_PLATFORM, LK_INIT_FLAG_CPU_RESUME);
LK_INIT_HOOK_FLAGS(arm_gic_init_percpu,
                   arm_gic_init_percpu,
                   LK_INIT_LEVEL_PLATFORM_EARLY, LK_INIT_FLAG_SECONDARY_CPUS);
 
LK_INIT_HOOK_FLAGS(arm_gic_suspend_cpu, arm_gic_suspend_cpu,
                   LK_INIT_LEVEL_PLATFORM, LK_INIT_FLAG_CPU_SUSPEND);
 
LK_INIT_HOOK_FLAGS(arm_gic_resume_cpu, arm_gic_resume_cpu,
                   LK_INIT_LEVEL_PLATFORM, LK_INIT_FLAG_CPU_RESUME);
 
 
LK_INIT_HOOK(bootargs, bootargs_init_hook, LK_INIT_LEVEL_THREADING);
LK_INIT_HOOK(console, console_init_hook, LK_INIT_LEVEL_PLATFORM_EARLY - 1);
LK_INIT_HOOK(pktbuf, pktbuf_init, LK_INIT_LEVEL_THREADING);
LK_INIT_HOOK(ptable, &ptable_init, LK_INIT_LEVEL_THREADING);
LK_INIT_HOOK(sysparam, &sysparam_init, LK_INIT_LEVEL_THREADING);
LK_INIT_HOOK(usb, usb_init, LK_INIT_LEVEL_THREADING);
LK_INIT_HOOK(vm_preheap, &vm_init_preheap, LK_INIT_LEVEL_HEAP - 1);
LK_INIT_HOOK(vm, &vm_init_postheap, LK_INIT_LEVEL_VM);
 
 
#include "stm32f10x.h" // Device header #include "Motor.h" #include "Serial.h" #include "Delay.h" #include "Car.h" int oppoa5=0; void Infrared_Init(){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能复用功能的时钟 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING ; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_3;// 3 4 7 8 2 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING ; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12|GPIO_Pin_15;//5 6 1 2 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); #define D1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) #define D2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3) #define D3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4) #define D4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5) #define D5 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11) #define D6 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12) #define D7 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) #define D8 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9) #define T 0.8 } int read(void)//D1是从左往右第一个传感器,一共有8个传感器 { int val=0,p; val+=D1*10000000; val+=D2*1000000; val+=D3*100000; val+=D4*10000; val+=D5*1000; val+=D6*100; val+=D7*10; val+=D8; p=val; val=0; return p; } int OUTPUT1=0,OUTPUT2=0;// OUTPUT1 和OUTPUT2 是控制小车左右轮速度的PWM输出值 int PID_sd=0;//小车差速PID控制器的PWM输出值 int error=0;//引用lk.c定义的error,才能在本文件内使用error该变量 //作为舵机PID控制器和差速PID控制器的传参输入值 double a=0;//最后的速度乘上a,实现调速
最新发布
03-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值