日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

嵌入式 c语言 面试题,嵌入式面试题-持续更新

發布時間:2024/7/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式 c语言 面试题,嵌入式面试题-持续更新 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.用預處理指令#define聲明一個常數,用以表示1年中有多少秒(忽略閏年問題)。

#define? SECONDS_PER_YEAR? (60 * 60 * 24 * 365)UL? //最后的UL代表無符號整數。

2.寫一個“標準”宏MIN,這個宏輸入兩個參數并返回較小的一個。

#define MIN(x, y) ((x) < (y) ? (x) : (y))? //注意x,y要加括號,因為x,y如果有復合運算會出現問題。

3.預處理器標識#error的目的是什么?

停止編譯,提示錯誤信息。

4.寫一個無限循環。

a) while(1)

b) for(;;)

c) loop:

goto loop;

5.請寫出float x與“零”比較的if語句。

const float EPSINON = 0.000001;

if ((x >= - EPS) && (x <= EPS));

6.嵌入式系統經常具有要求程序員去訪問某特定的內存位置的特點。在某工程中,要求設置一絕對地址為0x67a9的整型變量的值為0xaa66。

int *ptr;

ptr = (int *)0x67a9;

*ptr = 0xaa66;

7.嵌入式系統總是要用戶對變量或寄存器進行位操作。給定一個整型變量a,分別對a的第三位進行置1,清0,取反的操作,同時保持其它位不變。

a |= (1<<3); ? ?//置1

a &= ~(1<<3); //清0

a ^= (1<<3); ? ?//取反

8.關鍵字static的作用是什么?

(1)在函數體,一個被聲明為靜態的變量在這一函數被調用過程中維持其值不變。

(2)在模塊內(但在函數體外),一個被聲明為靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。

(3)在模塊內,一個被聲明為靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地范圍內使用。

9.關鍵字const是什么含意?

const的意思是只讀,它的作用是:

(1)表示為常量,不可更改;(2)改變變量的存儲域;(3)修飾函數參數時,防止參數被以外改變。

10.關鍵字volatile有什么含意并給出三個不同的例子。

volatile是易變的,不穩定的意思。volatile是關鍵字,是一種類型修飾符,用它修飾的變量表示可以被某些編譯器未知的因素更改,比如操作系統、硬件或者其他線程等。每次使用它修飾的變量的時候必須從內存中取出它的值,而不是從寄存器或者緩存中讀取,從而保證了對特殊地址的穩定訪問。

(1) 并行設備的硬件寄存器(如:狀態寄存器)

(2)一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)

(3)多線程應用中被幾個任務共享的變量

11.下面的聲明都是什么意思?

const int a; ? ? ? ? ? ?//a是一個常整型數

int const a; ? ? ? ? ? ?//同上

const int *a; ? ? ? ? ? //a是一個指向常整型數的指針(整型數是不可修改的,但指針可以)

int * const a; ? ? ? ? ? //a是一個指向整型數的常指針(指針指向的整型數是可以修改的,但指針是不可修改的)

const int * const a; ?//a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)

12.用變量a給出下面的定義

a) 一個整型數 ? ? ? ? //int a;

b) 一個指向整型數的指針 ?//int *a;

c) 一個指向指針的的指針,它指向的指針是指向一個整型數 ? //int **a;

d) 一個有10個整型數的數組 ?//int a[10]

e) 一個有10個指針的數組,該指針是指向一個整型數的 ?//int *a[10]

f) 一個指向有10個整型數數組的指針 ? //int (*a)[10]

g) 一個指向函數的指針,該函數有一個整型參數并返回一個整型數 ?//int (*a)[int]

h) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數并返回一個整型數 ?//int (*a[10])(int)

13.?#與##的作用?

#是把宏參數轉化為字符串的運算符,##是把兩個宏參數連接的運算符。如下:

#define STR(arg) #arg??????????則宏STR(hello)展開時為”hello”

#define NAME(y) name_##y????則宏NAME(1)展開為name_1

14.如何避免頭文件被重復包含?

例如,為避免頭文件my_head.h被重復包含,可在其中使用條件編譯:

#ifndef _MY_HEAD_H

#define _MY_HEAD_H????/*空宏*/

/*其他語句*/

#endif

15.extern關鍵字的作用?

修飾符 extern 用在變量或者函數的聲明前, 用來說明 “此變量 / 函數是在 別處定義的,要在此處引用”。

(1)extern修飾變量的聲明。

(2)extern修飾函數聲明。

(3)此外,extern修飾符可用于指示C或者C++函數的調用規范。

16.如何在C++代碼中調用C寫的文件?

#ifdef __cplusplus

extern "C" {

#endif

// 代碼

#ifdef __cplusplus

}

#endif

17. extern "C"的作用?

extern "C"的作用是讓 C++ 編譯器將extern "C"聲明的代碼當作 C 語言代碼處理,可以避免 C++ 因符號修飾導致代碼不能和C語言庫中的符號進行鏈接的問題。

18.隊列和棧的區別?

隊列先進先出,棧后進先出。

19.switch支持的參數類型?

switch語句中使用的表達式必須是int或enum類型,否則如float等其他數據類型是無法通過的編譯的,因為編譯器需要switch后面的語句和case后面的值精確匹配,而計算機無法精確表達一個float數據類型。

20.什么是預編譯,何時需要預編譯?

預編譯又稱為預處理,是做些代碼文本的替換工作。處理#開頭的指令,比如拷貝#include包含的文件代碼,#define宏定義的替換,條件編譯等。C提供的預處理功能主要有以下三種:(1)宏定義???(2)文件包含??(3)條件編譯

21.嵌入式設計流程?

(1)系統需求分析

(2)體系結構設計

(3)硬件/軟件協同設計

(4)系統集成

(5)系統測試

22.簡述你對嵌入式和嵌入式系統的理解。

凡是使用了CPU的電子設備都可以叫嵌入式,(如電子表、超聲波測距儀等)。而嵌入式系統一般值在開發時移植了操作系統,功能較復雜的電子設備,(如手機、掌上電腦等)。

23.簡述任務切換的過程。

當多任務內核決定運行另外的任務時,它保存正在運行任務的當前狀態,即CPU寄存器中的全部內容。這些內容保存在任務的當前狀態保存區,也就是任務自己的堆棧中。入棧工作完成以后,就把下一個將要運行的任務的當前狀態從任務的堆棧中重新裝入CPU的寄存器,并開始下一個任務的運行。這個過程就稱為任務切換。做任務切換所需要的時間取決于CPU有多少寄存器要入棧。

總結

以上是生活随笔為你收集整理的嵌入式 c语言 面试题,嵌入式面试题-持续更新的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。