0% found this document useful (0 votes)
27 views

Interview Questions

The document contains an interview question asking the candidate to introduce themselves, followed by their response introducing themselves as a final year student studying electronic and telecommunication engineering technology in Ho Chi Minh City, Vietnam. They discuss some of their school projects involving embedded systems and programming skills. The document then continues with additional interview questions about two of the candidate's projects, one involving a timer circuit using a PIC microcontroller and another involving a fingerprint-based student attendance system using ARM. It concludes discussing the candidate's career objectives of gaining practical experience and improving their job skills as an embedded software engineer.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views

Interview Questions

The document contains an interview question asking the candidate to introduce themselves, followed by their response introducing themselves as a final year student studying electronic and telecommunication engineering technology in Ho Chi Minh City, Vietnam. They discuss some of their school projects involving embedded systems and programming skills. The document then continues with additional interview questions about two of the candidate's projects, one involving a timer circuit using a PIC microcontroller and another involving a fingerprint-based student attendance system using ARM. It concludes discussing the candidate's career objectives of gaining practical experience and improving their job skills as an embedded software engineer.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

Interview Questions

Q1: Introduce myself


Tell me a little about yourself

Before I introduce myself, I would like to thank you very much for giving me
opportunity to talk about the postion of your company., full name is. I am final year
student at Ho Chi Minh city university of Technology and Education. My major is
Electronic and Telecommunication engineering technology. When I was a student, I
used to have some projects and take part in many activities school. During my course,
I studied topics such as Microcontroller, Embedded System (theory and lab), C
programming language and et cetera. I used to have some projects about Embedded
system such as : Timer Circuits using PIC, Fingerprint based Students Attendance
system and Line Following Robot using ARM and all of them achieved good results.
Recently, I joined in class ARM programming courses which allowed me to put my
theory for subject into practice. All of them have given me an excellent foundation for
building a career as an Embedded Software Engineer in the future. I am a motivated
person and a fast learner. I enjoy taking part in group activities and can also manage
my schedule well. I believe these will be useful for this position through understanding
carefully about the job position and working environment. For me, Bosch is a big and
influential company. I really want to have the opportunity to intern and work at as a
Embedded software intern

Q2: Project 1
In the project 1: the on-off timer circuit of small-capacity equipment. Incorporated
with a team 2 students to design Timer Circuit using Pic16F887 and another modules
to control on-off timer circuit of small capacity equipment. The circuit uses PIC16f887
microcontroller as the central microcontroller. The circuit also used modules include: 7
segment LED to show the mode you want to use. An LCD display to show the
countdown time and timer success notify. In this project, I decided to choose PIC
16f887 because is has many good features and advantages for programming. 16F887 is
a 40 PIN and 8 bit CMOS PIC. Microcontroller thar comes with nanoWatt technology.
Economical price and user-friendly architecture make this device easy to use and easy
to configure

Q3:Project 2

Career objective
I want to be able to apply my knowledge and skills from my college years in pratical projects, to
help deliver true benefits to the company, achieving the goal of becoming a good Embedded
Software Engineer in the future at your company
To improve my jobs skill and consolidate knowledge in a young and dynamic environment
Thông số con ARM STM32F103C8T6
I. Cấu hình chi tiết của STM32F103C8T6:
 ARM 32-bit Cortex M3 với clock max là 72Mhz.
 Bộ nhớ:
o 64 kbytes bộ nhớ Flash(bộ nhớ lập trình).
o 20kbytes SRAM.
 Clock, reset và quản lý nguồn.
o Điện áp hoạt động 2.0V -> 3.6V.
o Power on reset(POR), Power down reset(PDR) và programmable
voltage detector (PVD).
o Sử dụng thạch anh ngoài từ 4Mhz -> 20Mhz.
o Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz.
o Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC.
 Trong trường hợp điện áp thấp:
o Có các mode :ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ.
o Cấp nguồn ở chân Vbat bằng pin để hoạt động bộ RTC và sử dụng
lưu trữ data khi mất nguồn cấp chính.
 2 bộ ADC 12 bit với 9 kênh cho mỗi bộ.
o Khoảng giá trị chuyển đổi từ 0 – 3.6V.
o Lấy mẫu nhiều kênh hoặc 1 kênh.
o Có cảm biến nhiệt độ nội.
 DMA: bộ chuyển đổi này giúp tăng tốc độ xử lý do không có sự can thiệp
quá sâu của CPU.
o 7 kênh DMA.
o Hỗ trợ DMA cho ADC, I2C, SPI, UART.
 7 timer.
o 3 timer 16 bit hỗ trợ các mode IC/OC/PWM.
o 1 timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ
như ngắt input, dead-time..
o 2 watdog timer dùng để bảo vệ và kiểm tra lỗi.
o 1 sysTick timer 24 bit đếm xuống dùng cho các ứng dụng như hàm
Delay….
 Hỗ trợ 9 kênh giao tiếp bao gồm:
o 2 bộ I2C(SMBus/PMBus).
o 3 bộ USART(ISO 7816 interface, LIN, IrDA capability, modem
control).
o 2 SPIs (18 Mbit/s).
o 1 bộ CAN interface (2.0B Active)
o USB 2.0 full-speed interface
 Kiểm tra lỗi CRC và 96-bit ID.

Q4: Bộ nhớ tĩnh và bộ nhớ động:


TV: Trong các nền tảng có các ràng buộc đáng kể về dung lượng bộ nhớ, việc phân bổ
bộ nhớ tĩnh hay bộ nhớ dộng sẽ tốt hơn?
TA: In platforms with significant constraints on memory size, Is it more preferable to
allocate memory statically or dynamically?
--------------
Thích hợp sử dụng phân bố bộ nhớ tĩnh trên các nền tảng có kích thước bộ nhớ trong
kilobyte thấp và thấp hơn. Do: chi phí dữ liệu, chi phí CPU và phân mảnh bộ nhớ có
thể là vấn đề quan trọng khi sử dụng cấp phất bộ nhớ động
It’s preferable to use static memory allocation on platforms with memory sizes in the
low kilobytes and below. This is because data overhead, CPU overhead, and memory
fragmentation can be significant issues when using dynamic memory allocation."
Q5:Tại sao C và C++ vẫn rất phổ biến và được hỗ trợ rộng rãi trong các phần mềm
nhúng?
-----------
Các ràng buộc về phần cứng, cả về tốc độ bộ nhớ và tốc độ CPU, giới hạn những gì có
thể được thực hiện trên các thiết bị nhúng C và C++ thường có chi phí hoạt động rất
nhỏ và rất gần với phần cứng. Điều này làm cho chúng phù hợp cho cả các thiết bị nhỏ
nhất

Q6:Giải thích khái niệm về độ trễ ngắt


Độ trễ ngắt cơ bản đề cập đến khoảng thời gian mà một ngắt được tạo ra và nó được
phục vụ bởi một quy trình thích hợp được xác định, thường là trình xử lý ngắt. Nguyên
nhân do tín hiệu bên ngoài, một số điều kiện trong chương trình hoặc do có sự kiện
xảy ra. Các ngắt cũng có thể được che đậy để bỏ qua chúng ngay cả khi một sự kiện
xảy ra mà quy trình phải được thực thi

C/C++
I/ Mảng
1/ Các kiểu dữ liệu nào của C có thể được dùng trong mảng?
Tất cả kiểu dữ liệu của C.
2/Điều gì xảy ra nếu chương trình truy cập đến một phần tử có chỉ số nằm ngoài phạm
vi mảng?
Chương trình vẫn được dịch và chạy nhưng tạo ra kết quả không dự đoán được.
3/Mảng được khai báo sau đây có bao nhiêu phần tử?
int array[2][3][5][8];
Tên của phần tử thứ 10 là gì?
2*3*5*8 =240. array[0][0][1][1]

4/  Viết câu lệnh khai báo một mảng nguyên có 10 phần tử và khởi tạo tất cả các phần
tử là 1.
int array[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

5/ Cho mảng sau, viết mã để khởi tạo tất cả các phần tử là 88:
int eightyeight[88];

int eightyeight[88]; int x;


for ( x = 0; x < 88; x++ )
eightyeight[x] = 88;

6/ Cho mảng sau, viết mã để khởi tạo tất cả các phần tử là 0:

int stuff[12][10];

int stuff[12][10];
int sub1, sub2;
for (sub1 = 0; sub1 < 12; sub1++)
          for (sub2 = 0; sub2 < 10; sub2++)
                   stuff[sub1][sub2] = 0;

7/ Tìm điểm sai trong đoạn mã sau:

int x, y;
int array[10][3];
main()
{
for (x = 0; x < 3; x++)
for (y = 0; y < 10; y++)
array[x][y] = 0;
return 0;
}

int x, y;
int array[10][3];
main()
{
for (x = 0; x < 3; x++)
for (y = 0; y < 10; y++)
array[y][x] = 0;
return 0;
}

int x, y;
int array[10][3]; main()
{
for (x = 0; x < 10; x++)
for (y = 0; y < 3; y++)
array[x][y] = 0;
return 0;
}

8/ Tìm điểm sai trong đoạn mã sau:

int array[10];
int x = 1;
main(){
for (x = 1; x <= 10; x++)
array[x] = 99;
return 0;
}

int array[10];
int x = 1;
main(){
for (x = 0; x <= 9; x++)
array[x] = 99;
return 0;
}

9/  Viết chương trình tạo ra các số ngẫu nhiên cho mảng a[5][4]. Hiển thị ra màn hình
các giá trị của mảng theo từng cột.

/* Using two-dimensional arrays and rand() */


#include <stdio.h>
#include <stdlib.h>

/* Declare the array */


int array[5][4];
int a, b; main()
{
for (a = 0; a < 5; a++)
for (b = 0; b < 4; b++)
array[a][b] = rand();
/* Now print the array elements */
for (a = 0; a < 5; a++)
{
for (b = 0; b < 4; b++)
printf("%d\t", array[a][b]);
}
return 0;
}

10/ Viết chương trình khởi tạo mảng một chiều gồm 1000 số ngẫu nhiên. Hiển thị giá
trị trung bình và giá trị các phần tử mảng, và sau mỗi 10 giá trị hiển thị thì tạm dừng
màn hình.
#include <stdio.h>
#include <stdlib.h>

int random[1000];
int a, b, c;
long total = 0;
main(){
for (a = 0; a < 1000; a++){
random[a] = rand();
total += random[a];
}
printf("Average is: %ld", total / 1000); // hien thi tong
/* Now display the array elements 10 at a time */
for (a = 0; a < 1000; a++){
printf("random[%d] = ", a);
printf("%d", random[a]); // hien thi cac gia tri phan tu mang
if (a % 10 == 0 && a > 0){
printf("\nPress Enter to continue, CTRL-C to quit.");
getchar();
}
}
return 0;
} /* end of main() */

11/ Viết chương trình khởi tạo mảng một chiều gồm 10 phần tử, mỗi phần tử có giá trị
bằng chỉ số của nó.

#include <stdio.h>
int main()
{
Int a[10]={0,1,2,3,4,5,6,7,8,9};
Int I;
For(i=0;i<10;i++)
{
Printf(“a[i] = %d, a[i]);
}
Return 0;
}
12/ Sửa lại chương trình ở câu 9, sau khi hiển thị các giá trị khởi tạo, chương trình sẽ
sao chép các giá trị vào một mảng mới và thêm vào 10 cho mỗi giá trị. Hiển thị ra màn
hình giá trị các phần tử của mảng mới.

#include <stdio.h>
int elements[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int new_array[10]; // mang moi
int idx;
main()
{
for (idx = 0; idx < 10; idx++)
new_array[idx] = elements[idx] + 10;
for (idx = 0; idx < 10; idx++)
printf("elements[%d] = %d new_array[%d] = %d", idx, elements[idx],
idx, new_array[idx]);
return 0;
}

CON TRỎ
1/ Toán tử gì được dùng để xác định địa chỉ của một biến?
Toán tử &
2/ Toán tử gì được dùng để xác định giá trị ở vị trí được trỏ bởi một con trỏ? địa chỉ
của một biến?
Toán tử *

3. Con trỏ là gì?


Con trỏ cũng là 1 biến. Tuy nhiên biến này trỏ đến địa chỉ của một biến khác

4. Truy cập gián tiếp là gì?


Là truy cập đến nội dung của 1 biến khác thông qua con trỏ( tức là sử dụng biến con
trỏ để trỏ đến biến đó)

5. Mảng được lưu trữ trong bộ nhớ như thế nào?


Lưu trữ ở các vùng nhớ liên tiếp

6. Chỉ ra hai cách để nhận được địa chỉ phần tử đầu tiên của mảng data[].
C1: &data[0]
C2: data

7. Nếu mảng được truyền đến một hàm, hai cách gì để nhận biết mảng kết thúc ở đâu?

8. Sáu toán tử gì có thể thực hiện với con trỏ?


1/Gán 2/Truy cập gián tiếp 3/Lấy địa chỉ 4/Tăng 5/Giảm 6/ So sánh

9.  Giả sử bạn có hai con trỏ:


Nếu con trỏ đầu tiên trỏ đến phần tử thứ ba trong một mảng kiểu int,
con trỏ thứ hai trỏ đến phần tử thứ tư.
Việc trừ con trỏ thứ hai cho con trỏ đầu cho kết quả gì?

Sẽ trả về số phần tử giữa chúng (sẽ trả về 1)


Note: kích thước các phần tử trong mảng không liên quan.

10. Giả sử cost là một tên biến.


Làm thế nào để khai báo và khởi tạo một con trỏ có tên p_cost trỏ đến biến đó.
Làm thế nào để gán giá trị 100 cho biến cost bằng cách dùng cả truy cập trực tiếp và
gián tiếp.
Làm thế nào để in giá trị của con trỏ p_cost và giá trị con trỏ p_cost trỏ đến.

Int cost;
Int *p_cost;
p_cost = &cost;

//gán giá trị


TT: int cost=100;
GT: int *p_cost =100;
//in giá trị

Printf(“%d %d”, p_cost, *p_cost);

11. Làm thế nào để gán địa chỉ của biến thực có tên là radius cho một biến con trỏ.
Int a;
Int *p;
p=&a;

hoặc: int *p=&a;

12. Hai cách để gán giá trị 100 cho phần tử thứ ba của mảng data[].

Int a[1000];
a[2]=100;

hoặc: *(data+2)=100;

13. Viết một hàm có tên là sumarrays() có đối số là hai mảng, tính tổng giá trị cả hai
mảng và trả về tổng đó. Viết chương trình minh họa.

14. Viết lệnh khai báo biến con trỏ, khai báo và khởi gán con trỏ trỏ tới biến, khai báo
và khởi gán con trỏ trỏ đến con trỏ.
Int a;
Int *p=&a;
Int **b=&p;

15. Xét khai báo


float x;
float *px = &x;
float **ppx = &px;
Để gán 100 cho biến x, ta có thể viết như sau hay không?
*ppx = 100;

100 sẽ gán cho px


Sửa: **ppx=100;

16. Viết một nguyên mẫu hàm với đối là một mảng con trỏ kiểu char và trả về void.

17. Con trỏ trỏ đến hàm là gì?


18. Viết một khai báo con trỏ trỏ đến hàm trả về kiểu char và có đối là một mảng con
trỏ kiểu char.
19. Khai báo sau có gì sai:

char *ptr(char *x[]);


20. Giải thích các khai báo sau:

int *var1;
int var2;
int **var3;
21. Giải thích các khai báo sau:

int a[3][12];
int(*b)[12];
int *c[12];
22. Giải thích các khai báo sau:

char *z[10];
char *y(int field);
char(*x)(int field);
23. Viết một khai báo con trỏ trỏ đến hàm có đối kiểu nguyên và trả về biến kiểu float.
24. Viết một khai báo mảng con trỏ trỏ đến hàm có đối là chuỗi ký tự và trả về số
nguyên.
25. Viết lệnh khai báo mảng 10 con trỏ kiểu char.
26. Có điểm gì sai trong đoạn mã sau:

int x[3][12];
int *ptr[12];
ptr = x;

You might also like