诺瓦科技嵌入式笔试题目
    1:用C语言实现大小端的测试
    Int CheckCpu()
    {
    union
    {
    int a;
    char b;
    }c;
    c.a=1;
    if(c.b==1)
    printf(“小端”);
    else printf(“大端”);
    }
    2:volatile的作用有哪些?
    Volatile第一变量相等于说编译器这个变量的值可以随时发生变化,每次采用之前都必须回去内存里从新加载它的值,并不要随意针对它搞优化,主要用在:
    1:一个中断子程序中会访问到的非自动变量;
    2:多线程应用领域中被几个线程共享资源的变量;
    3:并行设备的硬件寄存器。
    3:C语言中static关键字的促进作用存有哪些?
    1:在函数体中,一个被声明为静态的变量在这个变量在调用过程中维持其值不变;
    2:在模块内(但在函数体外),一个被声明为静态的变量,可以被这个模块内的所用函数采用,但无法被模块外的函数采用,它就是一个本地的全局变量;
    3:在模块内,一个被声明为静态变量的函数,智能被这个模块内的函数调用;
    4:static全局变量与局部变量的区别:static全局变量就可以被初始化一次,避免其他单元文件中被提及;
    5:static局部变量与局部变量的区别:static局部变量只能被初始化一次,下一次依据上一次结果的值;
    6:static函数与普通函数的区别:static在内存中就用一份,普通函数在每一次调用中保持一份拷贝。
    4:请问下面三种变量的区别:
    Int const *p : 指向常整型的指针;
    Int *const p; 指向整型的常指针;
    Int *const *p: 指向常整型的常指针;
    5:在ARM系统中,在函数调用的时候,参数是通过哪种方式传递的。
    当参数大于等同于4的时候就是通过r0~r3去展开传达的,当参数大于4的时候就是通过压栈的方式展开传达。
    6:中断与异常有何区别.
    异常在处置的时候必须考量与处理器的时钟同步,实际上异常也称作同步中断,在处理器继续执行至因编程错误而引致的错误指令时,或者在继续执行期间发生特定错误,必须依靠内核处置的时候,处理器就可以产生一个异常;所谓中断就是指外部硬件产生的一个电信号从CPU的中断插槽步入,吓到CPU的运转。所谓异常就是指软件运转过程中出现了一些必须做出处置的事件,CPU自动产生一个陷于去吓到CPU的运转。
    7:用预处理指令#define表示一年中有多少秒
    #define SECONDS_PER_YEAR (60*60*24*365)UL
    注意后面必须加UL,表示计算的结构是常整型。
    8:详述SPI,UART,I2C三种传输方式。
    SPI:高速同步串行口,首发独立,可同步进行
    SPIUSB主要应用领域在EEPROM,Flash,实时时钟,A/D转变器,数字信号处理,就是一种全双工同步通讯总线,该USB通常采用四条线:以太网时钟线(sck),主出尚衣线,主入从出线,低电平有效地的从机挑选线。
    I2C协议:是单片机与其他芯片进行通讯的协议:1:只要求两条总线线路,一条是串行时钟线,一条是串行数据线; 2:通过软件设定地址 3:是一个多主机总线,如果两个或更多主机同时初始化数据传送可通过冲突检测和仲裁防止数据破坏; 4:I2C总线传输的是数据的总高位
    UART:主要就是由一个modem(调制解调器),可以将模拟信号量转化成数字信号量。
    9:中断不能返回一个值,中断不能传递参数。
    10:嵌入式系统总建议用户对变量或者寄存器展开位操作,取值一个整型变量a:
    define BIT3 (oxo1<<3)
    static int a ;
    void set_bit3(void)
    {
嵌入式多线程编程    a|=BIT3;
    }
    void clear_bit3(void)
    {
    a&=~BIT3;
    }
    作为一个嵌入式程序员,这种程序是小菜一碟,至所以给出这个程序,是想规范大家写程序方法,这里主要是用到了一个宏定义:BIT3 这样的话就可以增加程序的可读性
    同时移植性也进一步增强。
    1:嵌入式系统中经常要求程序去访问某特定内存的特点,在某工程中,要求设定一个绝对地址0x的整型变量的值为0xaa66.
    Int *ptr;
    ptr=(int*)0x67a9;
    *ptr=aa66
    2:引用和指针有什么区别?
    1:应用领域必须初始化,指针不必;
    2:引用处画化后不能改变,指针可以被改变;
    3:不存有指向空值的提及,但存有指向空值的指针;
    3:全局变量与局部变量在内存中是否有区别,是什么区别?
    全局变量存储在静态数据库,局部变量存储在堆栈;
    4:写出float,bool,int类型与零的比较,假设变量为X:
    Int : if(x==0)
    Float: if(x>0.&&x<0.)
    Bool: if(x==false)
    5:Intertnet采用哪种网络协议,该协议的主要层次结构?
    TCP/IP协议
    应用层/传输层/网络层/数字链路层/物理层。
    6:IP地址存有两部分共同组成:网络号和主机号
    7:程序的局部变量存储在(栈)中,全局变量存储于(静态存储区),动态申请数据存储于(堆中);
    8:撰写一个字符串激活函数:strcpy(const char *str,const char *str1)
    void strcpy(const *char str,const chat *str1)
    {
    if(*str1==’\0’) return;
    char *sp1,*sp2;
    sp1= str;
    sp2=str1;
    while(*sp2!=’\0’)
    {
    *sp1=sp2;
    sp1++;
    sp2++;
    }
    }
    9:撰写一个函数同时实现字符串滑动 void rechange(char *str)
    void rechange(char *str)
    {
    Int len;
    char t;
    len=strlen(str);
    for(int i=0;len/2;i++)
    {
    t=str[i];
    str[i]=str[len-i-1];
    str[len-i-1]=t;
    }
    }
    10:编写一个函数实现字符串比较 int strcmp(char *str1,char *str2),相等返回1,不相等返回0:
    int strcmp(char *str1,char *str2)
    {
    if(*str1==‘\0’||*str2==’\0’) return;
    while(*str1!=’\0’&&*str2!=’\0’&&*str1==*str2)
    {
    str1++;
    str2++;
    }
    if(*str1==*str2)
    return 1;
    else return 0;
    }
    }
    进程和线程的区别:
    1:调度:线程做为调度和分配的基本单元,进程做为具有资源的基本单位;
    2:并发性:不仅进程可以并发执行,同一进程内的线程也可以并发执行。
    3:具有资源:进程就是具有资源的基本单一制单元,线程不具有资源,但可以出访进程内的资源;
    4:在创建或撤销线程时,由于系统都要为之分配和回收内存资源,导致系统的开销明显大于创建或撤销线程时的开销。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。