精华内容
下载资源
问答
  • ARM嵌入式系统初始化过程

    千次阅读 2016-10-06 21:08:08
    基于ARM内核微处理器的系统一般为复杂的片上系统,这种复杂系统的多数硬件模块都是可配 置的,需要软件设置为特定的工作状态,因此在用户的应用程序之前,需要有一些专门的代码完成对系统的初始化。由于这类代码直接...

    基于ARM内核微处理器的系统一般为复杂的片上系统,这种复杂系统的多数硬件模块都是可配 置的,需要软件设置为特定的工作状态,因此在用户的应用程序之前,需要有一些专门的代码完成对系统的初始化。由于这类代码直接面对ARM处理器内核和硬件 控制器,一般都使用汇编语言完成。初始化代码完成的操作与具有的硬件平台相关,但一般包括一下的内容:

    --初始化异常向量表(中断向量表)

    --初始化存储器系统

    --初始化堆栈

    --初始化有特殊要求的端口和设备

    --初始化应用程序的运行环境

    --调用主应用程序

    1、初始化异常向量表(中断向量表)

    ARM微处理器结构要求中断向量表必须放置在从0x00地址开始的连续8×4字节的空间内,每当一个中断(异常)发生以后,ARM微处理器便强制把PC置 为对应的中断向量。由于每个中断只占用向量表中一个字(4个字节)的存储空间,只能放一条ARM指令,所以通常为跳转指令,使程序从向量表跳转到存储器的其他位置,执行真正的中断处理。

    具体代码实现如下:

    AREA Init,CODE,READONLY

    ENTRY

    B  Reset_Handler     ;异常复位

    B  Undef_Handler     ;未定义指令异常

    B  SWI_Handler       ;软件中断

    B  PreAbort_Handler  ;指令预取中止

    B  DataAbord_Handler ;数据中止

    B  .                 ;系统保留

    B  IRQ_Handler       ;普通外部中断

    B  FIQ_Handler       ;快速外部中断

    ..........

    2、初始化存储器系统

     主要是对系统存储器控制器(MMU)的初始化。由于存储器控制器并不是ARM架构的一部分,不同芯片的实现方式各不相同。由于运算能力和寻址能力的强大,基于ARM内核的微处理器系统一般都需要外扩展各种类型的存储器。对于存储器系统的初始化一般包括如下几个方面:

    --存储器类型、时序和总线宽度的配置

    --存储器地址的配置

    (1)存储器类型

    基于ARM微处理系统的存储器一般有如下几类:SARM,DRAM,Flah,同时,即使同类存储器也有访问速度上的不同。其中,SRAM和Flah属于 静态存储器,可以共用存储器端口,而DRAM有动态刷新和地址复用等特征,需要专门的存储器端口。

    (2)时序

    存储器端口的接口时序优化对系统性能影响非常大,因为系统运行的速度瓶颈一般都存在于存储器的访问,因此希望存储器的访问尽可能快,但又要考虑由此带来的系统稳定性问题。

    (3)总线宽度

     ARM微处理器架构支持8/16/32位的数据总线宽度访问存储器和外设,对于特定的存储器来说,需要设定数据总线的宽度。

    (4)存储器地址的配置

     ARM微处理器架构理论上可以支持4GB的地址空间,而对于一个实际的系统来说,配置的物理地址远没有这么多,因此,如何配置存储器的地址,也是一个重要 的问题。

    (5)存储器地址重映射

      存储器地址重映射就是可以通过软件配置来改变一块存储器物理地址的方法,是当前许多先进控制器所具有的功能。

    进行地址重映射的原因:提高系统的运行效率。

    进行地址重映射的注意:保证程序流程的连续性。

    有的ARM处理器不具有地址重映射的功能,可以采样代码搬移加跳转的方式完成上述功能。

    3、初始化堆栈

     由于ARM微处理器有7中运行模式,每一种模式的堆栈指针(SP)都是独立的(其中系统模式和用户模式使用相同的SP)。因此,需要对每一种模式的SP进 行初始化。

     采用的方法是:改变当前程序状态寄存器(CPSR)内的状态位,使处理器切换到不同的状态,然后初始化SP。但是对用户模式下SP的初始化应该放在最后, 因为ARM微处理器进入用户模式之后就无法再切换到其他模式。

    设置堆栈应该注意的问题是:堆栈的大小根据需要确定,要尽可能给堆栈分配高速存储器(例如片内的SRAM)。堆栈性能的提高对提高系统整体性能的影响非常 显著。

    初始化堆栈的代码如下:

    MRS  R0, CPSR

    BIC  R0, R0, #MODEMASK

    ORR  R1, R0, #IRQMODE

    MSR  CPSR_c, R1

    LDR  SP, =IRQStack

    BIC  R0, R0, #MODEMASK

    ORR  R1, R0, #FIQMODE

    MSR  CPSR_c, R1

    LDR  SP, =FIQStack

    .........

    4、初始化应用程序和有特殊要求的端口和设备

    该部分的初始化由具体的系统和用户需求决定,一般的外设初始化可以放在系统初始化以后进行。比较典型的应用是驱动一些简单的输出设备,例如LED等,用来 指示系统启动的进程和状态。初始化应用程序的运行环境,就是完成必要的从ROM到RAM的数据传输,初始化有特殊要求的端口、设备和应用程序的运行环境。

    5、改变处理器的模式

    ARM微处理器支持7种模式,其中:

    超级模式(Supervisor):复位后的缺省模式。

    多种特权模式变化:主要完成各模式的堆栈设置,注意不要进入用户模式。

    用户模式:用户程序运行模式。

    6、调用应用主程序

     当完成所有的系统初始化工作之后,就需要把程序流程转入主应用程序。最常见的操作是:

     IMPORT  C_Entry

     ......

    B       C_Entry

    展开全文
  • zigbee初始化流程

    千次阅读 2019-05-17 18:53:34
    main函数里主要完成了系统的各种初始化,最后启动系统。 int main( void ) { osal_int_disable( INTS_ALL );// 关闭中断 HAL_BOARD_INIT();// 初始化系统时钟 zmain_vdd_check();// 检查芯片电压 ...

    1.zigbee协议栈构成

    协议栈

    1.1 物理层(PHY)和介质访问控制层(MAC)

           物理层和介质控制层是由IEEE 802.15.4规范定义的,物理层控制天线的收发数据;zigbee无线网络中的网络号,网络发现等概念是介质访问控制层的内容。此外介质访问控制层还提供点对点的通信数据确认(Per-hop Acknowledgments)以及一些用于网络发现和网络形成的命令。

    1.2 网络层(NWK)

           网络层是对网型网络提供支持,如在全网范围内发送广播包,为单播数据包选择路由,确保数据包能够可靠地从一个节点发送到另一节点,此外网络层还具有安全特性,可以自行选择所需的安全策略。

    1.3 应用程序支持子层

           该层主要提供了一些API函数调用,此外,绑定表也是存储在应用程序支持子层。Zigbee设备对象ZDO是运行在端口0的应用程序,主要提供了一些网络管理方面的函数。每个Zigbee设备都与一个特定类别(profile)有关,这些类别定义了设备的应用环境,设备类型以及用于设备间通信的从集。

    1.4 总述

    • 所有端点都使用应用支持子层(APS)提供的服务。APS透过网络层和安全服务提供层与端点相接,并为数据传送、安全和固定服务
    • APS使用网络层(NWK)提供的服务。NWK负责设备到设备的通信,并负责网络中设备的初始化所包含的活动、消息路由和网络发现。应用层可透过Zigbee设备对象(ZDO)对网络层参数进行配置和存取。

    1.5 缩写与全程

    英文缩写全称备注
    APSApplication Support Sub-Layer应用程序支持子层
    SAPService Access Points服务接入点
    APSDE-SAPAps Data Entity-SAP应用程序支持子层
    数据实体服务接入点
    AOSME-SAPAPS Management Entity-SAP应用程序支持子层
    管理实体服务接入点
    NLDE-SAPNetwork Layer Data Entity-SAP网络层数据实体服务接入点
    NLME-SAPNetwork Layer Management Entity-SAP网络层管理实体服务接入点
    MCPS-SAPMAC Common Part Service-SAPMAC层通用服务接入点
    PD-SAPPhysical Layer Data Entity-SAP物理层数据实体服务接入点
    PLME-SAPPhysical Layer Management Entity-SAP物理层管理实体服务接入点

    2.源码分析

    1.1 main.c

    • 首先看zmain.c 中的main函数
      main函数里主要完成了系统的各种初始化,最后启动系统。
    		int main( void )
    		{ 
    		  osal_int_disable( INTS_ALL );// 关闭中断  
    		  HAL_BOARD_INIT();//  初始化系统时钟  
    		  zmain_vdd_check();// 检查芯片电压  
    		  InitBoard( OB_COLD );//初始化I/O  
    		  HalDriverInit();//初始化硬件驱动层 
    		  osal_nv_init( NULL );//初始化Flash存储器  
    		  ZMacInit();// 初始化MAC层  
    		  zmain_ext_addr();//确定64位网络地址
    		  zgInit();
    		#ifndef NONWK
    		  afInit(); //初始化AF层
    		#endif  
    		  osal_init_system(); // 初始化操作系统	  
    		  osal_int_enable( INTS_ALL );//  打开所有中断  
    		  InitBoard( OB_READY );// 初始化按键,显示等
    		  osal_start_system(); // 启动OSAL,运行操作系统
    		  return 0; 
    		} 
    
    • 在main函数的各种初始化函数中,需要我们关注的是下面两个

      osal_init_system(); // 初始化操作系统
      osal_start_system(); // 启动OSAL,运行操作系统

    1.2 osal_init_system() 初始化操作系统

    • osal_init_system() 这个函数的作用是初始化操作系统,在这个函数内初始化了系统的所有任务
      /*OSAL.c中的代码*/
      uint8 osal_init_system( void )
      {
        // Initialize the Memory Allocation System
        osal_mem_init();
      
        // Initialize the message queue
        osal_qHead = NULL;
      
        // Initialize the timers
        osalTimerInit();
      
        // Initialize the Power Management System
        osal_pwrmgr_init();
      
        // Initialize the system tasks.
        osalInitTasks();/****初始化了系统的所有任务******/
      
        // Setup efficient search for the first free block of heap.
        osal_mem_kick();
      
        return ( SUCCESS );
      }
      
    1.2.1追踪osalInitTasks()函数

    这个函数的作用就是要找的初始化所有任务的函数

    • OSAL_IoTApp.c中的代码 (我们书写的应用层代码)
    void osalInitTasks( void )//为各个进程添加任务ID,用作查找任务时用
    {
      uint8 taskID = 0;
    
      tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
      osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
    
      macTaskInit( taskID++ ); //MAC层的任务ID号
      nwk_init( taskID++ );   //网络ID分配
      Hal_Init( taskID++ );   //硬件ID分配
    #if defined( MT_TASK )
      MT_TaskInit( taskID++ );
    #endif
      APS_Init( taskID++ );
    #if defined ( ZIGBEE_FRAGMENTATION )
      APSF_Init( taskID++ );
    #endif
      ZDApp_Init( taskID++ );
    #if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
      ZDNwkMgr_Init( taskID++ );
    #endif
      IoTApp_Init( taskID );//为自己的任务添加ID,自己分配ID
    }
    
    • 不过这里需要注意的是,taskID和对应任务的处理函数的顺序要一致
    const pTaskEventHandlerFn tasksArr[] = {   //数组里存放的都是任务处理函数指针
    	  macEventLoop,   //MAC任务循环
    	  nwk_event_loop, //网络层任务函数
    	  Hal_ProcessEvent,//硬件层函数
    	#if defined( MT_TASK )
    	  MT_ProcessEvent,  //串口支持层定义
    	#endif
    	  APS_event_loop,   //应用支持层任务事件函数
    	#if defined ( ZIGBEE_FRAGMENTATION )
    	  APSF_ProcessEvent,
    	#endif
    	  ZDApp_event_loop,   //设备对象层函数
    	#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
    	  ZDNwkMgr_event_loop,
    	#endif
    	  IoTApp_ProcessEvent //自定义任务处理函数,需要自己添加和任务
    	};
    
    1.2.2 自定义IoTApp_ProcessEvent()函数。

           通过osal_msg_receive()函数取出系统事件消息,系统事件消息又分为多种消息,常用的有:
        AF_INCOMING_MSG_CMD 接收到了无线数据
        KEY_CHANGE 按键触发
        ZDO_STATE_CHANGE 网络状态发生变化

    UINT16 IoTApp_ProcessEvent( byte task_id, UINT16 events )
    {
      afIncomingMSGPacket_t *MSGpkt; //接收消息的结构体指针
    
      if ( events & SYS_EVENT_MSG )
      {
    	/*osal_msg_receive从消息队列中接收消息(接收指向消息结构体的指针)*/
    	MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( IoTApp_TaskID );
    	while ( MSGpkt )
    	{
    	  switch ( MSGpkt->hdr.event ) //对接收消息进行判断
    	  {
    		case AF_INCOMING_MSG_CMD: //接收到了无线数据
    		  IoTApp_MessageMSGCB( MSGpkt );
    		  break;
    		default:
    		  break;
    	  }
    
    	  //释放内存,因为zigbee消息都是存在堆上,需要手动释放
    	  osal_msg_deallocate( (uint8 *)MSGpkt ); 
    
    	  //从消息队列中接收下一条消息
    	  MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( IoTApp_TaskID );
    	}
    
    	// return unprocessed events
    	return (events ^ SYS_EVENT_MSG); //异或
      }
      return 0;
    }
    

    1.3 osal_start_system() 启动OSAL,运行操作系统

            追踪这个代码的实现,是在OSAL.c这个文件中。
            该函数是任务系统的主循环函数。它将查看所有任务事件,并为事件调用相应的任务task_event_processor()函数。
            如果没有事件(对于所有任务),此函数将使处理器进入休眠状态。这个函数不返回。

    void osal_start_system( void )
    {
    #if !defined ( ZBIT ) && !defined ( UBIT )
      for(;;)  // Forever Loop
    #endif
      {
    	uint8 idx = 0;
    
    	osalTimeUpdate();
    	Hal_ProcessPoll();  // This replaces MT_SerialPoll() and osal_check_timer().
    	
    	do {
    	  if (tasksEvents[idx])  // Task is highest priority that is ready.
    	  {
    		break;
    	  }
    	} while (++idx < tasksCnt);
    
    	if (idx < tasksCnt)
    	{
    	  uint16 events;
    	  halIntState_t intState;
    
    	  HAL_ENTER_CRITICAL_SECTION(intState);
    	  events = tasksEvents[idx];
    	  tasksEvents[idx] = 0;  // Clear the Events for this task.
    	  HAL_EXIT_CRITICAL_SECTION(intState);
    
    	  events = (tasksArr[idx])( idx, events );
    
    	  HAL_ENTER_CRITICAL_SECTION(intState);
    	  tasksEvents[idx] |= events;  // Add back unprocessed events to the current task.
    	  HAL_EXIT_CRITICAL_SECTION(intState);
    	}
    #if defined( POWER_SAVING )
    	else  // Complete pass through all task events with no activity?
    	{
    	  osal_pwrmgr_powerconserve();  // Put the processor/system into sleep
    	}
    #endif
      }
    }
    
    展开全文
  • GPIO初始化及点亮LED

    千次阅读 2016-07-22 17:27:42
    GPIO的配置 ##**GPIO的配置** **linux中申请GPIO的头文件** include/linux/gpio.h **三星平台的GPIO配置函数头文件** arch/arm/plat-samsung/include/plat/gpio-cfg.h,其中包括三星所有处理器的配置函数。...

    GPIO的配置

    linux中申请GPIO的头文件
    include/linux/gpio.h
    三星平台的GPIO配置函数头文件
    arch/arm/plat-samsung/include/plat/gpio-cfg.h,其中包括三星所有处理器的配置函数。
    三星平台EXYNOS系列平台,GPIO配置参数宏定义头文件
    arch/arm/plat-samsung/include/plat/gpio-cfg.h,GPIO管脚拉低拉高配置参数等等。
    三星平台4412平台,GPIO宏定义头文件,已经包含在头文件gpio.h中
    arch/arm/mach-exynos/include/mach/gpio-exynos4.h,包括4412处理器所有的GPIO的宏定义。

    点亮LED灯

    LED管脚申请函数和赋值
    linux平台下
    gpio_request
    gpio_set_value
    三星平台配置GPIO函数
    s3c_gpio_cfgpin
    GPIO配置输出模式宏变量
    S3C_GPIO_OUTPUT
    电路图对应引脚
    这里写图片描述

    这里写图片描述
    这里写图片描述
    示例代码

    #include <linux/init.h>
    #include <linux/module.h>
    /*驱动注册头文件,包含驱动结构体和注册卸载函数*/
    #include <linux/platform_device.h>
    /*注册杂项设备*/
    #include <linux/miscdevice.h>
    /*注册设备节点*/
    #include <linux/fs.h>
    
    /*linux中申请GPIO的头文件*/
    #include <linux/gpio.h>
    /*三星平台的GPIO配置函数头文件*/
    /*三星平台EXYNOS系列平台,GPIO配置参数宏定义的头文件*/
    #include <plat/gpio-cfg.h>
    #include <mach/gpio.h>
    /*三星4412平台,GPIO宏定义头文件*/
    #include <mach/exynos4.h>
    #define DRIVER_NAME "hello_ctl"
    #define DEVICE_NAME "hello_ctl"
    MODULE_LICENSE("Dula BSD/GPL");
    MODULE_AYTHOR("chenmiaohong");
    static long hello_ioctl( struct file *files, unsigned int cmd, unsigned long arg){
        printk("cmd is %d,arg is %d\n",cmd,arg);
    
        if(cmd > 1){
            printk(KERN_EMERG "cmd is 0 or 1\n");
        }
        if(arg > 1){
            printk(KERN_EMERG "arg is only 1\n");
        }
    
        gpio_set_value(EXYNOS4_GPL2(0),cmd);
    
        return 0;
    }
    static struct file_operations hello_ops = {
        .owner = THIS_MODULE,
        .open = hello_open,
        .release = hello_release,
        .unlocked_ioctl = hello_ioctl,
    };
    
    static  struct miscdevice hello_dev = {
        .minor = MISC_DYNAMIC_MINOR,
        .name = DEVICE_NAME,
        .fops = &hello_ops,
    };
    static int hello_release(struct inode *inode, struct file *file){
        printk(KERN_EMERG "hello release\n");
        return 0;
    }
    
    static int hello_open(struct inode *inode, struct file *file){
        printk(KERN_EMERG "hello open\n");
        return 0;
    }
    static int hello_probe(struct platform_device *pdv){
        int ret;
        printk(KERN_EMERG "\tinitialized\n");
        ret = gpio_request(EXYNOS4_GPL2(0),"LEDs");
        if(ret<0){
            printk(KERN_EMERG "\tgpio_request EXYNOS4_GPL2(0)failed\n");
        return ret;
        }
        s3c_gpio_cfgpin(EXYNOS4_GPL2(0),GPIO_OUTPUT);   
        gpio_set_value(EXYNOS4_GPL2(0),0);
        misc_register(&hello_dev);
        return 0;
    }
    static int hello_remove(struct platform_device *pdv){
    
        printk(KERN_EMERG "\tremove\n");
        misc_deregister(&hello_dev);
        return 0;
    }
    
    static void hello_shutdown(struct platform_device *pdv){
    
        ;
    }
    
    static int hello_suspend(struct platform_device *pdv,pm_message_t pmt){
    
        return 0;
    }
    
    static int hello_resume(struct platform_device *pdv){
    
        return 0;
    }
    struct platform_driver hello_driver = {
        .probe = hello_probe,
        .remove = hello_remove,
        .shutdown = hello_shutdown,
        .suspend = hello_suspend,
        .resume = hello_resume,
        .driver = {
            .name = DRIVER_NAME,
            .owner = THIS_MODULE,
        }
    };
    tatic int hello_init(void)
    {
        int DriverState;
    
        printk(KERN_EMERG "HELLO WORLD enter!\n");
        DriverState = platform_driver_register(&hello_driver);
    
        printk(KERN_EMERG "\tDriverState is %d\n",DriverState);
        return 0;
    }
    
    
    static void hello_exit(void)
    {
        printk(KERN_EMERG "HELLO WORLD exit!\n");
    
        platform_driver_unregister(&hello_driver);  
    }
    
    module_init(hello_init);
    module_exit(hello_exit);
    在内核源码中用make menuconfig将enable led_ctl取消。
    然后编写应用调用程序
    #include <stdio.h>
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/ioctl.h>
    
    main(){
        int fd;
        char *hello_node = "/dev/hello_ctl";
    
    /*O_RDWR只读打开,O_NDELAY非阻塞方式*/    
        if((fd = open(hello_node,O_RDWR|O_NDELAY))<0){
            printf("APP open %s failed",hello_node);
        }
        else{
            printf("APP open %s success",hello_node);
            ioctl(fd,1,1);
            sleep(3);
            ioctl(fd,0,1);
            sleep(3);
            ioctl(fd,1,1);
        }
    
        close(fd);
    }

    在文件下make使驱动程序编译生成.ko文件,使用交叉编译工具编译生成可执行文件,用tftp服务器下载到exynos4412开发板中,使用insmod加载驱动程序,ls /dev将查看到新增的设备节点hello_ctl.此时使用./执行可执行文件即可看到LED每隔3秒闪烁。

    展开全文
  • 嵌入式系统初始化过程

    千次阅读 2018-05-21 16:32:29
    系统初始化过程可以分为 3 个主要环节,按照自底向上、从硬件到软件的次序依次为:片级初始化、板级初始化和系统级初始化。1.片级初始化 完成嵌入式微处理器的初始化,包括设置嵌入式微处理器的核心寄存器和控制...
        系统初始化过程可以分为 3 个主要环节,按照自底向上、从硬件到软件的次序依次为: 片级初始化、板 级初始化和系统级初始化。

    1.片级初始化
         完成嵌入式微处理器的初始化,包括设置嵌入式微处理器的核心寄存器和控制寄存器、嵌入式微处理器核心工作模式和嵌入式微处理器的局部总线模式等。
        片级初始化把嵌入式微处理器从上电时的默认状态逐步设置成系统所要求的工作状态。
        这是一个 纯硬件的初始化过程。
    2.板级初始化
         完成嵌入式微处理器以外的其他硬件设备的初始化。另外,还需设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。
        这是一个同时 包含软硬件两部分在内的初始化过程。
    3.系统初始化
        该初始化过程以软件初始化为主, 主要进行操作系统的初始化
        BSP 将对嵌入式微处理器的控制权转交给嵌入式操作系统,由操作系统完成余下的初始化操作,包含加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,如网络系统、文件系统等。
        最后,操作系统创建应用程序环境,并将控制权交给应用程序的入口。
    展开全文
  • GPIO—按键中断

    千次阅读 2021-05-07 15:11:44
    13.1关于 STM32 的 EXTI 前面“第10章 基础重点—中断系统”介绍了STM32的中断和中断优先级,知道了所有外设中断都由 NVIC管理,比如USART、ADC、I2C、SPI等。GPIO产生的中断也不例外,但在给NVIC管理之前,还有一个...
  • Qt初始化工程详解

    千次阅读 2020-05-03 14:47:34
    由于项目原因,需要 重新 使用Qt,距离接触Qt大概过了半年左右,当初也仅仅是接触一下,并没有深究,再次使用,发现对初始化工程十分的陌生,又得花费蛮多时间重新学习,希望通过这篇博文记录起来,加深记忆的同时...
  • 51单片机初始化电调

    2019-04-13 17:30:17
    51单片机来产生pwm信号控制电调,根据不同按键可加减速。
  • CoInitialize和CoUninitialize最好在应用程序初始化以及退出时调用,样例中在构造以及析构中调用是不提倡的做法。 当调用CoUninitialize这个函数的时候,会关掉其所做的线程。那么如果你的应用在运行的时候只有一个...
  • 类和对象定义以及四种初始化方式

    千次阅读 2018-04-26 22:10:31
    初始化还有一种方式是通过提供一系列的get和set方法来进行初始化 public String getName (){ return name; } public void setName (String name){ this .name = name; } 我们利用这个方法...
  • GPIO初始化&中断控制器初始化

    千次阅读 2020-01-11 23:00:23
    GPIO的初始化   最近在学习ZYNQ,因为以前没有咋接触过这方面的开发,所以想着就在学习的过程中把这些知识都记录下来.今天学习了如何通过SDK来初始化PL端的GPIO,并且完成GPIO中断的初始化。 1.1 ZYNQ中的...
  • 极简按键V1.0.87.zip

    2020-08-19 17:48:39
    一款简单的按键工具 可以自定义按键和时间间隔 非常简约快速 小巧方便 实测可用 为啥非要50个字 又不是写作文
  • ARM初始化过程详解

    千次阅读 2009-09-04 00:38:00
    ARM初始化过程详解ARM嵌入式系统初始化过程 基于ARM内核微处理器的系统一般为复杂的片上系统,这种复杂系统的多数硬件模块都是可配置的,需要软件设置为特定的工作状态,因此在用户的应用程序之前,需要有一些专门的...
  • 首先了解一下com组件,这样我们才能明白初始化com库的作用,用到两个API:CoInitialize,CoInitializEX 一、什么是COM组件 1、COM是Component Object Model (组件对象模型)的缩写 2、COM组件是以WIN32动态链接库(DLL...
  • VxWorks6.9初始化流程介绍

    千次阅读 2019-10-23 13:46:09
    在讲初始化流程之前,我们先了解下VxWorks的三种映像类型。要搞清楚映像结构,需要先了解下VxWorks的内存空间分配。所以我们先从框架入手。 1. 框架图 2. 内存空间分配 二、内核映像 根据应用场合不同,...
  • STM32 IO口初始化配置的一些理解

    千次阅读 2020-05-01 09:30:53
    本次设计中需要的外围电路的输入以及输出,这里就以正点原子的库函数为例,进行IO口的初始化配置。 首先,以继电器驱动为例,代表了IO口开漏输出,通过输出高电平,控制外围电路。 void Relay_Init(void) { GPIO_...
  • button初始化

    千次阅读 2016-07-04 14:09:25
    _startLiveButton = [UIButton buttonWithType:UIButtonTypeCustom];  [_startLiveButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];  [_startLiveButton.titleLa
  • 了解STM32的NVIC中断优先级管理及初始化简介NVIC总结NVIC中断优先级分组中断优先级设置 简介 1、CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可程中断设置。 2、STM32F103系列...
  • LINUX系统初始化

    万次阅读 2018-04-07 20:35:44
    内核初始化:内核会调用一系列的初始化函数去对所有的内核组件进行初始化,由start_kernel()---.....---> rest_init() ----..----> kernel_init() ----....--> init_post() ------到---> 第一个用户init进程结束。...
  • node 开发环境请先自行准备 npm install -g @vue/cli 安装完成之后命令行则存在 vue 命令 ...下面介绍选择 manually select features 的相关流程 ( 使用上下箭头按键切换选项 – enter 按键确定选择 – 下同 )
  • 按键亮灯,亮30s,中途再次按键可关闭,时间可自行更改,非延时处理。
  • 如何在UE4 C++中进行按键绑定

    千次阅读 2017-06-05 15:16:52
    ue4中C++的按键绑定虽然没有蓝图那么方便的调用 但也不难:(如有错误欢迎指正) 首先要在编辑器中点开项目设置: 选择输入设置: 在这里看到有两种按键设置选项 第一个Action代表输入响应只有两种状态 按下...
  • 按键精灵:程序初始化时间

    千次阅读 2011-11-11 17:24:03
    主要针对界面的初始化 //************ //功能:从点击界面至界面初始化成功 //************ //点击登入时间 Dim startTime //加载成功时间 Dim endTime //点击登入游戏 MoveTo 962, 851 LeftClick 1 //取点击登入...
  • //P27=1,P26=1,P25=1,此时38译码器中的Y7=0,进而的得到Y7C=1 P0=0XFF //数码管显示数字操作,此时是全关闭 } 上述详细的解释了继电器蜂鸣器、LED、数码管的初始化操作,以上就是我们刚开始写代码时候的一些初始化...
  • STM32F103实验二:按键控制LED亮灭

    万次阅读 多人点赞 2019-08-08 22:10:54
    STM32单片机按键控制LED亮灭。
  • STM32入门-GPIO初始化步骤

    千次阅读 多人点赞 2020-01-16 11:56:57
    STM32入门-GPIO初始化步骤 基础知识 STM32F103ZE的开发板里总共有7组IO口,每组IO口有16个IO,即这块板子总共有112个IO口分别是GPIOA~GPIOG。每个I/O端口位可以自由编程,但I/O端口寄存器必须按32位字节访问,不允许...
  • STM32按键扫描代码

    2018-10-25 14:47:55
    扫描独立按键,具有软件滤波机制,具有按键FIFO。可以检测如下事件: 1、按键按下;2、按键弹起;3、长按键;4、长按时自动连发;5、组合按键
  • 解决方法: 1.切换root权限启动看看能不能启动 2.查看SytemOut.log 的权限是否是root ,如果是root 修改成was权限 3.查看下内存是否存满
  • 中断线上中断的初始化是通过函数 EXTI_Init()实现的。EXTI_Init()函数的定义是: void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); 下面我们用一个使用范例来说明这个函数的使用: EXTI_InitTypeDef EXTI_...
  • 5、UCOSIII系统初始化和启动

    千次阅读 2018-08-04 09:25:47
    1、 UCOSIII系统初始化 在使用UCOSIII之前我们必须先初始化UCOSIII,即函数OSInit()就是用来完成UCOSIII的初始化,而且OSInit()必须先于其他UCOSIII函数调用,包括OSStart()。 int main(void) { OS_ERR err; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,432
精华内容 37,372
关键字:

初始化按键