Interview Questions
Interview Questions
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.
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 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;
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;
}
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.
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ử *
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?
Int cost;
Int *p_cost;
p_cost = &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;
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;
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.
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;