0
1
00:00:02,130 --> 00:00:06,210
Vì vậy, chào mừng trở lại, hãy tiếp tục.
1

2
00:00:06,220 --> 00:00:07,210
Vì vậy tôi sẽ tiếp tục
2

3
00:00:07,210 --> 00:00:13,750
bằng cách tạo một chức năng đơn giản ở đây để giúp tôi bật và tắt đèn LED màu xanh đậm. tôi chỉ đi
3

4
00:00:13,750 --> 00:00:20,900
để tạo một API đơn giản, tôi sẽ gọi nó là màu xanh lam, vì vậy hãy bỏ qua màu xanh
4

5
00:00:21,490 --> 00:00:24,450
Và nó cũng có chức năng void void.
5

6
00:00:25,720 --> 00:00:30,310
Về cơ bản tôi chỉ có thể gọi chức năng này để bật đèn led màu xanh
6

7
00:00:37,800 --> 00:00:49,730
và chúng ta hãy có phần đối lập sẽ là màu xanh.
7

8
00:00:49,930 --> 00:00:56,150
Ở đây chúng ta có thể sử dụng toán tử này để bật màu xanh
8

9
00:00:56,170 --> 00:00:59,350
Vì vậy, sau đó hãy đặt các nguyên mẫu ở đầu
9

10
00:00:59,810 --> 00:01:03,520
Và xem, chỉ cần đặt nó ở đây
10

11
00:01:06,560 --> 00:01:07,020
đặt nó ở đây là tốt
11

12
00:01:11,630 --> 00:01:14,430
Vì vậy, bây giờ tôi sẽ chỉ đến đây.
12

13
00:01:15,290 --> 00:01:18,590
Và những gì tôi sẽ làm là tôi sẽ gọi một chức năng mới
13

14
00:01:22,550 --> 00:01:34,460
màu xanh bật hoặc trì hoãn một giây và sau đó tắt màu xanh và sau đó tôi sẽ trì hoãn một giây nữa, phải.
14

15
00:01:34,460 --> 00:01:41,160
Vì vậy, hãy biên dịch và kiểm tra trên bảng của chúng tôi.
15

16
00:01:44,730 --> 00:01:46,990
không có lỗi, không có cảnh báo.
16

17
00:01:47,070 --> 00:01:55,500
Vì vậy, kết nối bảng của bạn và tải xuống và tôi hy vọng đèn LED màu xanh của bạn đang nhấp nháy.
17

18
00:01:55,530 --> 00:01:57,070
Của tôi đang nhấp nháy, chỉ là màu xanh
18

19
00:01:57,210 --> 00:02:03,060
Vì vậy, bây giờ chúng ta hãy đi đến chế độ xem gỡ lỗi và kiểm tra xem mã dành phần lớn thời gian ở đâu.
19

20
00:02:03,070 --> 00:02:04,970
Vì vậy, tôi sẽ bấm vào đây để xem gỡ lỗi
20

21
00:02:09,020 --> 00:02:11,270
nó mở ra
21

22
00:02:11,430 --> 00:02:11,760
Đúng.
22

23
00:02:11,760 --> 00:02:17,310
Vì vậy, trước khi chúng tôi kiểm tra mã, hãy đảm bảo rằng bạn đã có chế độ xem cục bộ của mình, ngăn xếp lõi cộng với chế độ xem cục bộ.
23

24
00:02:17,610 --> 00:02:18,450
ở đây.
24

25
00:02:18,450 --> 00:02:26,160
Nếu bạn không đến để xem ở đây và sau đó chọn cửa sổ ngăn xếp cuộc gọi và sau đó nó sẽ kích hoạt chế độ xem này
25

26
00:02:26,160 --> 00:02:27,720
cho bạn.
26

27
00:02:27,720 --> 00:02:34,830
Vì vậy, những gì sẽ xảy ra là khi tôi nhấn nút này ở đây, chạy, mã sẽ chạy như thể tôi là
27

28
00:02:34,830 --> 00:02:37,750
chạy firmware một cách bình thường.
28

29
00:02:37,740 --> 00:02:43,200
Và khi nó chạy tôi sẽ nhấn nút này khi nó bắt đầu chạy nút này, nút dừng đang diễn ra
29

30
00:02:43,200 --> 00:02:48,450
để được kích hoạt và tôi sẽ nhấn nút này và sau đó nó sẽ dừng lại và sau đó chúng ta sẽ thấy nơi
30

31
00:02:48,450 --> 00:02:49,440
mã dừng lại.
31

32
00:02:49,440 --> 00:02:55,260
Vì vậy, tôi sẽ nhấn nút này và mã đang chạy vì bạn có thể thấy đèn LED màu xanh đang nhấp nháy như được cho là
32

33
00:02:55,260 --> 00:02:56,280
chớp mắt
33

34
00:02:56,280 --> 00:02:58,740
Vì vậy, sau đó tôi sẽ bấm vào đây để dừng lại.
34

35
00:02:58,800 --> 00:03:03,380
Chúng tôi làm gián đoạn mã để chúng tôi có thể tìm thấy nơi chương trình dừng lại.
35

36
00:03:03,510 --> 00:03:05,750
Đúng. Trong ngăn xếp cuộc gọi cộng với người dân địa phương
36

37
00:03:06,180 --> 00:03:07,140
lượt xem.
37

38
00:03:07,470 --> 00:03:12,660
Chúng tôi nhận ra rằng nó đã dừng trong chức năng này, chức năng get tick và chức năng này là một phần của sự chậm trễ
38

39
00:03:12,660 --> 00:03:13,100
mô-đun.
39

40
00:03:13,110 --> 00:03:18,760
Chúng ta có thể tìm thấy điều đó bằng cách nhấp chuột phải vào đây và sẽ hiển thị mã màu. Xem,
40

41
00:03:18,900 --> 00:03:22,740
chúng tôi thấy rằng đó là trong chức năng trì hoãn.
41

42
00:03:22,740 --> 00:03:30,700
Vì vậy, chúng tôi sẽ chạy mã một lần nữa để dừng nó và thấy tôi đang chạy nó, sau đó tôi dừng lại.
42

43
00:03:30,740 --> 00:03:32,810
Và sau đó chúng tôi tìm thấy nó ở cùng một nơi.
43

44
00:03:33,000 --> 00:03:43,440
Nó dành thời gian ở đâu? Trong độ trễ s. Hãy làm điều đó lần thứ ba. Tôi chỉ chạy nó, ngẫu nhiên, tôi dừng nó
44

45
00:03:43,770 --> 00:03:51,180
và sau đó chúng ta vẫn thấy mình trong hàm get tick là hàm trì hoãn.
45

46
00:03:51,200 --> 00:03:57,830
Trong thực tế, mã này dành khoảng 95 phần trăm thời gian cho hàm trì hoãn và chúng ta biết hàm trì hoãn
46

47
00:03:57,920 --> 00:03:59,020
Không lam gi cả.
47

48
00:03:59,120 --> 00:04:02,890
Nó chỉ ăn chu kỳ CPU không làm gì cả.
48

49
00:04:02,930 --> 00:04:08,360
Tôi cũng nên chỉ ra rằng cấu trúc chương trình đơn giản này là cái được gọi là nền / tiền cảnh
49

50
00:04:08,960 --> 00:04:16,900
cấu trúc luồng, nghĩa là có chức năng chính bình thường và ít nhất một thói quen dịch vụ ngắt.
50

51
00:04:16,900 --> 00:04:21,410
Hàm chính được đặt ở phía trước trong khi thường trình dịch vụ ngắt được đặt thành
51

52
00:04:21,410 --> 00:04:22,410
bối cảnh.
52

53
00:04:22,410 --> 00:04:28,100
Trong ví dụ chúng ta vừa viết, tất nhiên chúng ta có chức năng chính và một trình xử lý dịch vụ ngắt
53

54
00:04:28,130 --> 00:04:34,590
trình xử lý systick nhớ trình xử lý ngắt còn được gọi là các thói quen dịch vụ ngắt.
54

55
00:04:34,760 --> 00:04:40,440
Và tôi cũng nên chỉ ra cho bạn rằng có một cuộc tranh luận sôi nổi ngoài kia là nền tảng
55

56
00:04:40,440 --> 00:04:43,020
và đó là tiền cảnh. Trong một số văn bản
56

57
00:04:43,100 --> 00:04:50,260
bạn tìm thấy hàm chính được mô tả là nằm trong nền và các dịch vụ ngắt trên nền trước.
57

58
00:04:50,300 --> 00:04:57,160
Một ví dụ về các văn bản như vậy là hệ điều hành microm hai. Một số bạn có thể quen
58

59
00:04:57,220 --> 00:05:04,550
Với hệ điều hành microm, đây là loại hạt nhân công nghiệp rất phổ biến, loại microm os hai thật
59

60
00:05:04,550 --> 00:05:10,790
tài liệu nhân thời gian mô tả luồng chính là nền trong khi dịch vụ ngắt
60

61
00:05:10,790 --> 00:05:13,940
các thói quen như là tiền cảnh.
61

62
00:05:13,940 --> 00:05:20,510
Tuy nhiên, phần lớn các văn bản thấy nó trực quan hơn khi đề cập đến chủ đề chính là tiền cảnh và
62

63
00:05:20,510 --> 00:05:26,780
dịch vụ ngắt thường xuyên làm nền tảng và trong suốt khóa học này, chúng tôi sẽ đề cập đến
63

64
00:05:26,780 --> 00:05:32,870
luồng chính làm tiền cảnh và thường trình dịch vụ ngắt làm nền.
64

65
00:05:32,900 --> 00:05:40,220
Chúng ta hãy xem sơ đồ dòng của phần sụn đơn giản mà chúng ta vừa viết. Như chúng ta có thể thấy ở đây, nó bắt đầu
65

66
00:05:40,510 --> 00:05:47,810
nó khởi tạo GPIO, nó bật màu xanh và sau đó nó trì hoãn một giây, nó tắt màu xanh
66

67
00:05:47,960 --> 00:05:51,100
sau đó nó trì hoãn một giây và sau đó nó quay trở lại.
67

68
00:05:51,440 --> 00:05:59,330
Nhưng điều quan trọng ở đây là hình chữ nhật ở đây, chúng ta thấy rằng trong hàm độ trễ chúng ta tìm thấy
68

69
00:05:59,330 --> 00:06:06,650
những mũi tên đi ngược lên. Khi thực thi đến đây, nó chờ đợi một sự kiện và nó vẫn còn
69

70
00:06:06,650 --> 00:06:09,200
bị chặn cho đến khi sự kiện xảy ra.
70

71
00:06:09,290 --> 00:06:13,230
Trong trường hợp của ví dụ này, sự kiện đó là thời gian chờ hệ thống.
71

72
00:06:13,390 --> 00:06:19,910
Và hãy nhớ rằng chúng ta trực tiếp đặt khoảng thời gian chờ thông qua đối số chúng ta chuyển sang hàm trì hoãn s.
72

73
00:06:20,390 --> 00:06:27,170
Việc triển khai mà chúng tôi sử dụng gần như hàng ngày trong phần sụn nhúng của chúng tôi là để tạo độ trễ
73

74
00:06:27,170 --> 00:06:30,990
chức năng, nó là những gì được gọi là mã chặn.
74

75
00:06:31,080 --> 00:06:36,530
Và đây là lý do tại sao chương trình dành phần lớn thời gian của nó trong thời gian trễ vì khi đến phần đó
75

76
00:06:36,620 --> 00:06:39,050
bị chặn cho đến khi thời gian chờ xảy ra.
76

77
00:06:39,050 --> 00:06:44,700
Tiếp tục, bây giờ hãy tạo API để giúp chúng tôi chuyển đổi đèn LED màu cam.
77

78
00:06:44,840 --> 00:06:50,030
Vì vậy, những gì tôi sẽ làm là tôi sẽ sao chép những cái chúng tôi có cho màu xanh ở đây như thế này và
78

79
00:06:50,030 --> 00:06:57,320
sau đó tôi sẽ dán nó xuống đây và sau đó ở mọi nơi tôi thấy màu xanh tôi sẽ đổi tên nó thành màu cam, vì vậy tôi sẽ
79

80
00:06:57,320 --> 00:07:01,370
đổi tên này thành màu cam nên mũ thấp hơn.
80

81
00:07:01,760 --> 00:07:03,830
Sau đó, tất nhiên ở đây màu cam
81

82
00:07:07,140 --> 00:07:09,640
sau đó ở đây màu cam
82

83
00:07:13,210 --> 00:07:17,180
và sau đó tất nhiên là màu cam.
83

84
00:07:17,440 --> 00:07:22,870
Vâng, đây là màu xanh, tôi gọi nó là màu xanh do nhầm lẫn.
84

85
00:07:23,260 --> 00:07:25,190
Vì vậy, tôi sẽ sắp xếp lại nó.
85

86
00:07:26,730 --> 00:07:27,430
Có một cái ở đây
86

87
00:07:30,540 --> 00:07:35,920
Hãy để tôi mang cái này lên đó và dọn dẹp nó một chút, đúng không.
87

88
00:07:35,960 --> 00:07:37,180
Có nó được bảo hiểm.
88

89
00:07:37,190 --> 00:07:42,080
Vì vậy, tiếp theo chúng ta hãy đặt các nguyên mẫu của các hàm mới ở đây như thế này
89

90
00:07:45,880 --> 00:07:48,510
Hãy sao chép cái này, sau đó dán.
90

91
00:07:48,730 --> 00:07:50,670
Và sau đó nó trở thành màu cam,
91

92
00:07:55,590 --> 00:07:58,380
điều này trở thành màu cam tất nhiên
