Tự học lập trình nhúng - tài liệu và hướng học


Học lập trình nhúng tạm mình chia làm 2 phần, và mỗi phần điều có các yêu cầu về KIẾN THỨC & KĨ NĂNG riêng:

1. Lập trình: Lập trình nhúng đa phần sử dụng C/C++ để phát triển ứng dụng, việc hiểu sâu về ngôn ngữ và hoạt động của trình biên dịch là rất quan trọng. 

2. Nhúng: Các kiến thức liên quan đến sử dụng ngoại vi của vi điều khiển, hệ điều hành thời gian thực RTOS, hệ thống Linux, các design partten dành cho embedded system.

 

Kiến thức và kĩ năng lập trình

Hệ thống nhúng đa phần sử dụng ngôn ngữ C/C++ để lập trình, đối với các bạn học các ngành điện tử, điện tử viễn thông, tự động hóa thường không có thế mạnh lập trình, do lượng kiến thức xung quanh bộ môn lập trình rất ít, thời lượng thực hành lập trình cũng hạn chế nên khó xây dựng cho mình được tư duy lập trình tốt. 

 

Càng ngày, hệ thống nhúng ngày càng phức tạp, lượng code ngày càng lớn. Để phát triển ứng dụng nhúng lập trình viên hay làm việc trên các SDK (Software Development Kit), SDK tổ chức thành các lớp khác nhau, và thường người lập trình sẽ viết ở lớp ứng dụng trên cùng, việc nắm được các Design Pattern của SDK là rất quan trọng để phát triển nhanh ứng dụng.

 

Để nâng cao kĩ năng lập trình, ngoài các kiến thức và kĩ năng liên quan đến ngôn ngữ lập trình C/C++, các kiến thức xung quanh như cấu trúc dữ liệu và thuật toán cũng như tư duy lập trình cũng cần được rèn luyện thêm, thầy Tùng trường khoa học tự nhiên có mở khóa học này, sau khóa học tư duy lập trình của các bạn sẽ cải thiện rất đáng kể: https://bigocoding.com/

 

Quay lại về kiến thức C/C++, việc nắm vững kiến thức về address và pointer là rất cần thiết, khi nào có thời gian mình sẽ có 1 bài viết về chủ đề này sẽ đơn giản và dễ hiểu. Về phần này có một môn của trường đại học Stanford dạy khá dễ hiểu là: https://www.youtube.com/watch?v=Ps8jOj7diA0 ,các bạn xem ở các video đầu tiên.

Học C, bạn cần nắm thêm 1 phần cũng rất quan trọng để có thể nắm được cấu trúc của các source lớn đó là hướng đối tượng trong C, nghe có vẻ lạ nhỉ ? Link hướng dẫn chi tiết cho phần này: https://www.state-machine.com/oop 

 

Việc hiểu rõ các hoạt động của Startup code, phân vùng bộ nhớ trên Linker file cũng là khác biệt giữa lập trình nhúng và phần còn lại, kiến thức này rất quan trọng đối với các bạn làm sản phẩm production cho các công ty. Nếu có thời gian mình sẽ có các bài viết về các case study cho các bạn ở phần này.

 

Kiến thức và kĩ năng về hệ thống nhúng

Đa phần, các chương trình học hiện tại ở VN tập trung chính vào học sử dụng ngoại vi, TIMER, UART, SPI,... và hiện nay có xu hướng sử dụng các trình generate code, như Cube MX, tùy vào dòng chip.

Việc tiếp cận nhúng theo phương pháp này ban đầu tạo sự hào hứng ban đầu tốt, code và chạy thực tế rất nhanh, tuy nhiên khi làm các dự án thực tế việc thiếu các kiến thức cơ bản sẽ là rào cản rất lớn.

Dự án thực tế tùy thuộc vào nhu cầu sản phẩm sẽ lựa chọn loại chip và compiler khác nhau. cũng như effort thực sự khi làm dự án thực tế là xử lý các issue phát sinh, cách tiếp cận học không đi từ cơ bản sẽ là rào cản lớn.

 

Một chương trình học nhúng vi điều khiển mình thấy khá sát với thực tế dự án, cũng như bao quát nhiều vấn đề là chương trình tranning của state-machine.com:

Link khóa học: https://www.state-machine.com/video-course

Trong khóa học này có 1 nội dung rất quan trọng là hướng dẫn các bạn tự viết 1 hệ điều hành thời gian thực RTOS, việc tự viết RTOS giúp các bạn hiểu sâu sắc hoạt động bên trong RTOS, việc sử dụng các RTOS bản thương mại như FreeRTOS, Zephyr,... sẽ rất dễ dàng hơn rất nhiều.

 

state-machine.com cũng giới thiệu cho bạn các kiến thức nâng cao giúp các bạn tổ chức được các dự án phức tạp như event-driven programing, các loại state-machine,... Nếu đã từng làm việc qua các SDK về Zigbee, BLE,... các bạn để ý gần như tất cả stack trên đều sử dụng mô hình event-driven, tùy từng hãng sẽ xây dựng các mô hình khác nhau.

Các bạn tham khảo tại: https://www.state-machine.com/category/concepts

Debug trong hệ thống nhúng vi điều khiển có nhiều điểm khác biệt so với các loại lập trình khác, đa phần là do giới hạn bộ nhớ của MCU (vi điều khiển), bạn cần có các phương pháp ghi log đặc biệt, để log khi sản phẩm chạy thực tế, các kĩ năng debug trên trình debug, cũng như sử dụng Logic Analyzer,... phần này khá dài và phức tạp mình sẽ chia sẻ ở các bài viết khác.

Hiện tại ngành nhúng đang hot với các nhu cầu ở các mảng Automotive và IoT, nhu cầu việc làm là rất lớn, chúc các bạn học tốt và tìm được công việc phù hợp.

 Nguồn bài viết: https://epcb.vn/blogs/news/hoc-lap-trinh-nhung-tai-lieu-va-huong-hoc

Nhận xét

Bài đăng phổ biến từ blog này

Hệ thống giám sát cảnh báo rò rỉ nước online

Kết nối cảm biến công nghiệp Máy tính thông qua ứng dụng Insight Sensor

Nguyên lý hoạt động của cảm biến đo nồng độ khí carbon monoxide và các vấn đề liên quan