嵌入式相关4

/************************

Chapter3 系统类

***********************/

1. Rtx51 Tiny是如何实现任务调度,切换的?

时间片轮转,每个任务执行一定的时间退出执行下个任务如此循环。一个时间片内任务可以通过调用系统函数结束自身的执行转去执行下个任务。任务执行超过一个时间片系统强制终止该任务的执行转去执行下个任务。

2. Small Rtos51是如何实现任务调度,切换的?

完全基于有优先级的抢占式操作系统。任务切换有两种情况:1当前任务自己放弃cpu时间; 2中断程序使优先级更高的任务就绪,所有中断退出后进行任务切换。

3. Uc/os是如何实现任务调度,切换的?

完全基于有优先级的抢占式操作系统。任务切换有两种情况:1当前任务自己放弃cpu时间; 2中断程序使优先级更高的任务就绪,所有中断退出后进行任务切换。任务切换的过程大致是当前任务上下文入栈,最高优先级任务上下文出栈。

4.Linux是如何实现任务调度的?

Linux既有时间片又有高优先级抢占。时间片到强制任务调度。时间片内有更高优先级任务就绪任务切换。

  1. 编译工具的解释

答:arm-linux-ld:用于将多个目标文件、库文件连接成可执行文件。-T选项可以直接使用它来指定代码段、数据段、bss段的起始地址,也可以用来指定一个连接脚步,在连接脚本中进行更复杂的地址设置。如:

arm-linux-ld –Ttext 0x00000000 link.o –o link_elf_0x30000000

arm-linux-ojcopy:被用来复制一个目标文件的内容到另一个文件中,可以使用不同于源文件的格式来输出目的文件,即可以进行格式转换。

在编译b ootloader,内核时,常用arm-linux-objcopy命令将ELF格式的生成结果转换为二进制文件,如:

arm-linux-objcopy –O binary –S elf_file bin_file

arm-linux-objdump:用于显示二进制文件信息,常用来查看反汇编代码。如:

arm-linux-objdump –D elf_file > dis_file

grep:搜索,如:

grep "request" * -R *表示查找当前目录下的所有文件、目录,-R表示递归查找子目录。

diff命令常用来比较文件、目录,也可以用来制定补丁文件。如:

diff –urNwB linux-2.6.22 linux-2.6.22_ok > linux-2.6.22.diff

-u:表示在比较结果中输出上下文中一些相同的行,这有利于人工定位。

-r:表示递归比较各个子目录下的文件

-N:将不存在的文件当做空文件

-w:忽略对空格的比较

-B:忽略对空行的比较。

2.makefile

hello:hello.c

gcc –o hello hello.c

clean:

rm –f hello

make命令根据文件的更新时间戳来决定哪些文件需要重新编译,这使得可以避免编译已经编译过的,没有变化的程序,可以大大提高效率。

决定编译哪些文件?

怎样编译这些文件?

怎样连接这些文件,最重要的是它们的顺序如何?

3.cache的作用

基于程序访问的局部性,在主存和cpu通用寄存器之间设置一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供cpu在一段时间内使用,这对提高程序的运行速度有很大的作用。

启用cache后,cpu读取数据时,如果cache中有这个数据的副本则直接返回,否则从主存中读入数据,并存入cache中,下次再读写这个数据时,可以直接使用cache中的副本。

写数据时,有写回式 write back和写穿式write through。

4、LCD的驱动

#define VBPD     (14)     //垂直同步信号的后肩
#define VFPD     (11)     //垂直同步信号的前肩
#define VSPW     (2)     //垂直同步信号的脉宽

#define HBPD     (37)    //水平同步信号的后肩
#define HFPD     (19)     //水平同步信号的前肩
#define HSPW     (29)    //水平同步信号的脉宽

主要设置这些时间参数,经过这些像素的无效数据后,第一个有效像素才出现。

frame_buffer驱动程序初始化函数的流程:

开始

获取架构相关的一些信息,mach_info = pdev->dev.platform_data:

初始化fb_info结构,其中用到了mach_info的一些内容

注册中断处理函数

使能LCD控制器的时钟

初始化frame_buffer的内存

初始化

5、uboot移植

a),系统时钟的设置,2440的FCLK为400MHz,分频率为fclk:hclk:pclk=1:4:8,upll=48MHz,uclk=48MHz,

分别为fclk:内核时钟,主频。

hclk:总线时钟

pclk:I/O接口时钟。

设置串口波特率时需要获得系统时钟。

a),设置机器码,168.

a),选择nor flash型号,配置一个flash文件。

支持串口xmodem协议,使用U_BOOT_CMD宏来增加loadx命令:主要是一个do_load_serial_bin的函数和load_serial_xmodem函数。

a),支持烧写yaffs文件系统的映像。cmd_nand.c,0-》1

6.移植linux内核

1、makefile和kconfig文件分析

2、在移植linux之前,先了解它的启动过程。主要分两部分:

⑴、arch/arm/kernel/head.S是内核执行的第一个文件,架构/开发板相关的引导过程:首先检查内核是否支持当前架构的处理器,然后检查是否支持当前开发板。

接下来为调用start_kernel作准备:连接内核时使用虚拟地址,要设置页表,使能MMU。

复制数据段,清除代码段,设置栈指针,保存cpu的ID,调用start_kernel函数。

⑵、/init/main.c,进行内核的初始化的全部工作,输出linux的版本信息,设置于体系结构相关的环境:setup_arch,初始化控制台:console_init,最后调用rest_init函数启动init过程,创建第一个进程init,

7、文件系统

为了在安装软件时能够预知文件、目录的存放位置,为了让用户方便的找到不同类型的文件,所以需要构建文件系统。内核映像文件、内核启动后运行的第一个程序,给用户提高操作界面的shell程序、应用程序所依赖的库等。这些必需、基本的文件合成根文件系统。

C/C++面试题大汇总之微软亚洲技术中心面试题

1.进程和线程的差别。

2.测试方法

3.Heap与stack的差别。

4.Windows下的内存是如何管理的?

5.介绍.Net和.Net的安全性。

6.客户端如何访问.Net组件实现Web Service?

7.C/C++编译器中虚表是如何完成的?

8.谈谈COM的线程模型。然后讨论进程内/外组件的差别。

9.谈谈IA32下的分页机制

10.给两个变量,如何找出一个带环单链表中是什么地方出现环的?

11.在IA32中一共有多少种办法从用户态跳到内核态?

12.如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口,怎样实现?

13.如何截取键盘的响应,让所有的‘a‘变成‘b‘?

14.Apartment在COM中有什么用?为什么要引入?

15.存储过程是什么?有什么用?有什么优点?

16.Template有什么特点?什么时候用?

17.谈谈Windows DNA结构的特点和优点。

18.网络编程中设计并发服务器,使用多进程与多线程 ,请问有什么区别?

 

1、将一个字符串逆序

2、将一个链表逆序

3、计算一个字节里(byte)里面有多少bit被置1

4、搜索给定的字节(byte)

5、在一个字符串中找到可能的最长的子字符串

6、字符串转换为整数

7、整数转换为字符串

威盛

1.什么是平衡二叉树?编写一个删除平衡二叉树的程序?

2.写一个程序,求有向有权图两点之间的最小权?

3.根据你的理解,写出Cstring类的构造函数和析构函数?

4.使用C语言实现对ini文件的访问,使程序可以对int,double,字符串类进行读写。

5.n×n个方格(n为任意整数),定义若两个格有公共边则称两个格相邻。现将 个格中的N个格子图黑,使每个格子都与黑格子相邻。试编程,使N最小。

1.static变量和static 函数各有什么特点?

3.描述一下嵌入式基于ROM的运行方式基于ram的运行方式有什么区别。

4.task 有几种状态?

5.task 有几种通讯方式?

6.C函数允许重入吗?

7.嵌入式操作系统和通用操作系统有什么差别?

一面,技术面

(1)VxWorks、uc/OS、Palm嵌入式系统操作系统的区别?

(2)做嵌入式软件开发和普通桌面软件开发有什么区别?

(3)c语言问题,union和struct 的区别?

(4)sizeof(一大堆变量),如果用这个函数分配内存的大小一定与定义相同吗?

(5)解释什么是优先级反转。

Can structures be passed to the functions by value?

Why cannot arrays be passed by values to functions?

Advantages and disadvantages of using macro and inline functions?

What happens when recursion functions are declared inline?

Scope of static variables?

Difference between object oriented and object based languages?

Multiple inheritance - objects contain howmany multiply inherited ancestor?

What are the 4 different types of inheritance relationship?

How would you find out the no of instance of a class?

Is java a pure object oriented language? Why?

Order of constructor and destructor call in case of multiple inheritance?

Can u have inline virtual functions in a class?

When you inherit a class using private keyword which members of base class are visible to the derived class?

What is the output of printf("\nab\bcd\ref"); -> ef

#define cat(x,y) x##y concatenates x to y. But cat(cat(1,2),3) does not expand but gives preprocessor warning. Why?

Can you have constant volatile variable? Yes, you can have a volatile pointer?

++*ip increments what? it increments what ip points to

Operations involving unsigned and signed – unsigned will be converted to signed

a+++b -> (a++)+b

malloc(sizeof(0)) will return – valid pointer

main() {fork();fork();fork();printf("hello world"); } – will print 8 times.

Array of pts to functions – void (*fptr[10])()

Which way of writing infinite loops is more efficient than others? there are 3ways.

# error – what it does?

How is function itoa() written?

Who to know wether systemuses big endian or little endian format and how to convert among them?

What is interrupt latency?

What is forward reference w.r.t. pointers in c?

How is generic list manipulation function written which accepts elements of any kind?

What is the difference between hard real-time and soft real-time OS?

What is interrupt latency? How can you recuce it?

What is the differnce between embedded systems and the system in which rtos is running?

How can you define a structure with bit field members?

What are the features different in pSOS and vxWorks?

How do you write a function which takes 2 arguments - a byte and a field in the byte and returns the value of the field in that byte?

What are the different storage classes in C?

What are the different qualifiers in C?

What are the different BSD and SVR4 communication mechanisms

一位资深的嵌入式项目经理曾这样对我说:搞嵌入式要往下走,要搞底层要搞算法,因为它们比较有前途。

Embedded firmware interview questions

1、将一个字符串逆序 /*

#include <iostream>

using namespace std;

//#define NULL ((void *)0)

char * mystrrev(char * const dest,const char * const src)

{

if (dest==NULL && src==NULL)

return NULL;

char *addr = dest;

int val_len = strlen(src);

dest[val_len] = ‘\0‘;

int i;

for (i=0; i<val_len; i++)

{

*(dest+i) = *(src+val_len-i-1);

}

return addr;

}

main()

{

char *str="asdfa";

char *str1=NULL;

str1 = (char *)malloc(20);

if (str1 == NULL)

cout<<"malloc failed";

cout<<mystrrev(str1,str);

free(str1);

str1=NULL;//杜绝野指针

}

2、将一个链表逆序

p=head;

q=p->next;

while(q!=NULL)

{

temp=q->next;

q->next=p;

p=q;

q=temp;

}

这样增加个辅助的指针就行乐。

ok 通过编译的代码:

#include <stdio.h>

#include <ctype.h>

#include <stdlib.h>

typedef struct List{

int data;

struct List *next;

}List;

List *list_create(void)

{

struct List *head,*tail,*p;

int e;

head=(List *)malloc(sizeof(List));

tail=head;

printf("\nList Create,input numbers(end of 0):");

scanf("%d",&e);

while(e){

p=(List *)malloc(sizeof(List));

p->data=e;

tail->next=p;

tail=p;

scanf("%d",&e);}

tail->next=NULL;

return head;

}

List *list_reverse(List *head)

{

List *p,*q,*r;

p=head;

q=p->next;

while(q!=NULL)

{

r=q->next;

q->next=p;

p=q;

q=r;

}

head->next=NULL;

head=p;

return head;

}

void main(void)

{

struct List *head,*p;

int d;

head=list_create();

printf("\n");

for(p=head->next;p;p=p->next)

printf("--%d--",p->data);

head=list_reverse(head);

printf("\n");

for(p=head;p->next;p=p->next)

printf("--%d--",p->data);

}

3、计算一个字节里(byte)里面有多少bit被置1

解:此题按步骤解:先定位到某一个BYTE数据;再计算其中有多少个1。叠加得解。

#incluede<iostream>

#define N 10

//定义BYTE类型别名

#ifndef BYTE

typedef unsigned char BYTE;

#endif

int comb(BYTE b[],int n)

{

int count=0;

int bi,bj;

BYTE cc=1,tt;

4、搜索给定的字节(byte)

for(bi=0;bi<n;bi++)

{

//计算该BYTE的8个bit中有多少个1

tt=b[bi];

       for(bj=0;bj<8;bj++)

{

         //与1相与或模2结果是否是1?测试当前bit是否为1

         //if(tt%2==1)

       if((tt&cc)==1)

{

            count++;

         }

         //右移一位或除以2,效果相同

//tt=tt>>1;

tt=tt/2;

}

}

return count;

}

//测试

int main()

{

BYTE b[10]={3,3,3,11,1,1,1,1,1,1};

cout<<comb(b,N)<<endl;

return 0;

}

5。编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。

char * search(char *cpSource, char ch)

{

char *cpTemp=NULL, *cpDest=NULL;

int iTemp, iCount=0;

while(*cpSource)

{

if(*cpSource == ch)

{

iTemp = 0;

cpTemp = cpSource;

while(*cpSource == ch)

++iTemp, ++cpSource;

if(iTemp > iCount)

iCount = iTemp, cpDest = cpTemp;

if(!*cpSource)

break;

}

++cpSource;

}

return cpDest;

}

6、字符串转换为整数

// 自定义函数MyAtoI

// 实现整数字符串转换为证书输出

// 程序不检查字符串的正确性,请用户在调用前检查

//

#include <stdio.h>

#include <string.h>

int MyAtoI(char str[])

{

int i;

int weight = 1; // 权重

int rtn = 0; // 用作返回

for(i = strlen(str) - 1; i >= 0; i--)

{

rtn += (str[i] - ‘0‘)* weight; //

weight *= 10; // 增重

}

return rtn;

}

void main()

{

char str[32];

printf("Input a string :");

gets(str);

printf("%d\n", MyAtoI(str));

}

7、整数转换为字符串

#include<stdio.h>

#include<string.h>

void reverse(char s[])

{   //字符串反转

int c, i=0, j;

for(j=strlen(s)-1;i<j;j--)

{    c=s[i];

s[i]=s[j];

s[j]=c;

i++;

}

}

void IntegerToString(char s[],int n)

{    int i=0,sign;

if((sign=n)<0)//如果是负数,先转成正数

n=-n;

do //从个位开始变成字符,直到最高位,最后应该反转

{    s[i++]=n%10+‘0‘;

}while((n=n/10)>0);

//如果是负数,补上负号

if(sign<0)

s[i++]=‘-‘;

s[i]=‘\0‘;//字符串结束

reverse(s);

}

void main()

{    int m;

char c[100];

printf("请输入整数m: ");

scanf("%d",&m);

IntegerToString(c,m);

printf("integer = %d string = %s\n", m, c);

}

时间: 2024-08-29 18:29:31

嵌入式相关4的相关文章

嵌入式相关5

嵌入式常用定义整理 简述常见的嵌入式存储器和特点(4种以上). ROM.SRAM.DRAM. 根据掉电数据是否丢失,存储器可以分为RAM(随机存取器)和ROM(只读存储器),其中RAM的访问速度比较快,但掉电后数据会丢失,而ROM掉电后数据不会丢失.人们通常所说的内存即指系统中的RAM. RAM又可分为SRAM(静态存储器)和DRAM(动态存储器) SRAM是利用双稳态触发器来保存信息的,只要不掉电,信息是不会丢失的. DRAM是利用MOS(金属氧化物半导体)电容存储电荷来储存信息的,因此必须通

嵌入式相关1

1. 如何在C中初始化一个字符数组. 这个问题看似很简单,但是我们要将最简单的问题用最严谨的态度来对待.关键的地方:初始化.字符型.数组.最简单的方法是char array[];.这个问题看似解决了,但是在初始化上好像还欠缺点什么,个人认为:char array[5]={'1','2','3','4','5'};或者char array[5]={"12345"};或者char array[2][10]={"China","Beijing"};也许

嵌入式相关的概念

1.嵌入式系统的定义 一般定义是以应用为中心.以计算机技术为基础.软件硬件可裁剪.适时应用系统,对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统. 广义上讲,凡是带有微处理器 的专用软硬件系统都可称为嵌入式系统. 2.嵌入式系统的特点 系统内核小:嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多 专用性强:嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植 系统精简:嵌入式系统一般不要求其功能设计及实现上过于

嵌入式相关3

嵌入式软件笔试 Chapter1 语法类 1 .volatile作用?应用场合举3例 volatile修饰的变量表示这个变量可能会被意想不到的改变,对该变量的操作将不作优化,用到该变量时都从这个变量的原始地址读取,而不是用保存在寄存器里的备份. Volatile常用在: 1). 硬件寄存器(如:状态寄存器). 2). 中断程序中会访问到的非自动变量(Non-automatic variables). 3). 多线程应用中几个任务共享的变量 2. 一个参数既可以是const还可以是volatile

嵌入式相关协议

Zigbee通信: 1.指定协调器的PANID,子节点通过这个地址来建立链接(PANID==0xFFFF,将会按照信号的强弱进行链接) 2.协调器在链接建立后会创建一个短地址,通过此地址进行数据的收发 BLE通信: 1.BLE外围设备进行间隔发送广播,所有主设备进行扫描,某一个主设备发起链接. 2.链接进行建立后通过UUID进行数据的收发. 原文地址:https://www.cnblogs.com/wgf123/p/12384809.html

做嵌入式,C语言相关的朋友不要错过

前言 相对来讲嵌入式相关的人群总体来说比较少,那么有没有一个聚集地呢? 为回馈读者,「编程珠玑」与「嵌入式linux」,「EmbeddDeveloper」三个公众号联合组织了此次福利活动,「编程珠玑」将送出高质量书籍七本,极客时间价值99元阅码两个,「嵌入式linux」送出小米手环3两个,高质量书籍一本,而「EmbeddDeveloper」将送出高质量书籍五本. 规则 本次活动面向的是以上三个公众号的读者朋友,注意奥,这次抽奖方式不与以往不完全一样了,一定要看完奥! 1. 在公众号的后台回复[抽

关于嵌入式如何学习(看了不后悔,给学技术的同行一条光明的路)

关于嵌入式如何学习,我相信有很多大牛回答得很专业,最近在知乎上看到一网名为----李brooks,~的网友对此进行了总结,我个人觉得非常好,还有其他两位网友li crifan和Tony Ho,毕竟我工作以来也还有好多东西没有接触,就有他说的那些中的部分内容,我们来看看他们说了什么内容: 有一位大学生四年级的网友提出这样的问题: 本人大四学生,专业为电气类的,有C语言,单片机,模电,数电的基础,一直想从事嵌入式方面的工作(感兴趣),但是以目前的水平,暂时还不能找到这方面的工作,所以一直在纠结是先找

从嵌入式程序员到副总裁,行业挺重要!

10月24日,正直国人的程序员节日,笔者采访了华清远见集团副总裁,刘总可以称得上程序员的励志榜样,他历经十多年的努力,从一名普通的嵌入式开发工程师奋斗到华清远见副总裁,当前掌管华清远见教育集团的研发业务.在采访中他多次提到选择行业很重要,同时在采访末尾也给了我们当代程序员很多宝贵的建议. 完整视频采访:http://***hot-videos/5496.html 专访内容如下: 入行初衷 主持人:刘老师您最初是怎样选择到这个行业中的呢? 刘洪涛:刚刚毕业时我作为一名嵌入式工程师在一家做安防的公司

嵌入式操作系统与物联网演进之路

文/屠敏 物联网是新一代信息技术的重要组成部分,回顾其发展,其中不得不提的必然是嵌入式系统.传统的嵌入式系统与互联网的发展衍生出物联网,而在如今的物联网热潮之下,嵌入式系统也面临着全新的机遇与挑战.那么,两者的碰撞融合究竟会带来怎样的火花?对于传统的嵌入式开发者,我们应该如何改变应对新格局?在此我们采访了著名的嵌入式系统专家何小庆,跟他一起探索嵌入式操作系统与物联网演进之路. 何小庆,著名的嵌入式系统专家,国内最早涉足嵌入式 OS 者之一,创办了北京麦克泰软件技术有限公司,有 30 年嵌入式技术