Những năm trở lại đây, cứ nhắc đến công nghệ là người ta lại nhắc đến 4.0, nhắc đến IoT, smartthing, … Với lĩnh vực lập trình, cộng đồng Dev hiện nay cũng có nhiều lĩnh vực để học và phát triển hơn liên quan trực tiếp đến phần cứng và 1 trong những vị trí đang hot hiện nay là kỹ sư lập trình nhúng – Embedded Developer. Vậy thì công việc của kỹ sư lập trình nhúng là gì và tại sao nó lại hot trong hiện tại là thời gian sắp tới, bài viết này mình sẽ cùng các bạn đi tìm hiểu sâu hơn về ngành này nhé.
Hệ thống nhúng (Embedded System) là gì?
Trước tiên chúng ta cùng tìm hiểu về khái niệm hệ thống nhúng (Embedded System), nó là tập hợp bao gồm phần cứng và 1 phần mềm viết riêng để điều khiển, tương tác với phần cứng đó được gọi là phần mềm nhúng (Embedded Software). Đặc điểm của hệ thống nhúng là chúng có thể tự điều hành (hoạt động) với 1 mục đích cụ thể và được thiết kế để có thể tích hợp vào hệ thống lớn hơn tùy theo mục đích sử dụng. Hiện nay các hệ thống nhúng đang có vai trò quan trọng và hữu ích trong nhiều ngành công nghiệp cũng như đời sống của chúng ta, có thể kể vài ví dụ như sau:
- Ngành công nghiệp chế tạo máy: hầu hết các dây chuyền lắp ráp, sản xuất máy móc hiện đại ngày nay đều là những hệ thống nhúng với quy mô từ nhỏ đến lớn. Chúng có khả năng tự vận hành, thiết kế chuyên biệt để sử dụng tùy theo mục đích.
- Ngành công nghiệp ô tô: Hộp số tự động, hệ thống phanh, cảm biến lùi, … đều là những hệ thống nhúng mà các hãng sản xuất xe trang bị và cũng được quảng cáo là những tính năng mới của họ.
- Smarthome, Smartcity: cái này có lẽ là gần gũi nhất với anh em lập trình khi có rất nhiều dự án liên quan với mục đích tạo ra các ứng dụng điều khiển thiết bị điện, điện tử trong gia đình. Đấy cũng chính là những hệ thống nhúng, 1 phần quan trọng trong lĩnh vực IoT nói chung ngày nay.
Công việc của kỹ sư lập trình nhúng là gì?
Xưa nay anh em lập trình viên vẫn hay than vãn rằng: em chỉ là lập trình viên, em không biết sửa máy tính, máy in hay máy giặt. Tuy vậy thì câu nói này không hẳn đúng với anh em làm lập trình nhúng nhé. Mặc dù trong lĩnh vực lập trình nhúng vẫn thường chia ra mảng chuyên lập trình và mảng chuyên thiết kế phần cứng, dù vậy thì với việc phải làm trực tiếp trên thiết bị phần cứng đặc thù thì các Embedded Developer hầu như sẽ đều phải trang bị kiến thức về phần cứng. Cụ thể thì trong 1 hệ thống nhúng, chúng ta cần nắm được các thành phần cơ bản như sau:
- ROM: Chứa chương trình, các dữ liệu được fix hoặc các constant data.
- RAM: Chứa chương trình thực thi và các biến tạm
- MCU: bộ xử lý tính toán trung tâm
- Ngoài ra là các thiết bị ngoại vi khác để giao tiếp hay điều khiển phần cứng.
Thêm 1 khái niệm mà chúng ta cần nắm đó là firmware – đây là 1 chương trình hướng dẫn được ghi vào bộ nhớ của 1 thiết bị điện tử đơn với mục đích cụ thể và thực hiện các chức năng cấp thấp, ví dụ như chuyển đổi tín hiệu cảm biến. Firmware được viết bằng ngôn ngữ cấp thấp và sau đó được dịch sang mã máy để phần cứng của thiết bị có thể đọc và thực thi nó.
Như vậy, công việc của 1 kỹ sư lập trình nhúng bao gồm:
- Viết và lập trình firmware
- Phân tích để lựa chọn những giải pháp hợp lý nhất cho toàn hệ thống nhúng: điều này cực kỳ quan trọng liên quan đến việc tối ưu chi phí phần cứng mà vẫn đáp ứng được nhu cầu hệ thống.
- Viết code, test, document, tài liệu liên quan cho sản phẩm của mình
- Phối hợp với các team phát triển phần mềm khác để xây dựng các ứng dụng điều khiển cho thiết bị di động, trên các hệ điều hành, driver, …
Cần học gì để trở thành Embedded Developer?
Như đề cập ở phần trên thì việc viết code vẫn là 1 phần quan trọng với kỹ sư lập trình nhúng, vì thế cũng giống như nghề lập trình viên nói chung, bạn cần trang bị khả năng lập trình, khả năng đọc hiểu tài liệu đa phần bằng tiếng Anh (vì hầu hết các thiết bị phần cứng sẽ được nhập về lắp ráp). Ngoài ra, 1 số kiến thức đặc thù mà bạn cần trang bị thêm trong mảng này như sau:
- Lập trình C: C là ngôn ngữ quan trọng nhất trong lập trình nhúng, bạn cần nắm vững và thậm chí cần chuyên sâu về C.
- Kiến thức về điện tử: các kiến thức về logic, vi điều khiển, vi xử lý, …
- Kiến thức về hệ điều hành: kiến trúc máy tính, hệ điều hành Linux (phần lớn sẽ sử dụng hệ điều hành này), hệ điều hành thời gian thực (Realtime OS)
- Memory (bộ nhớ): RAM, DRAM, SRAM, NOR, NAND, …
- Cấu trúc dữ liệu và giải thuật: cái này thì thật ra lập trình nào cũng cần
- Các loại giao tiếp: USB, SATA, PCIE, UART,…
Về kiến thức chuyên ngành, hãy bổ sung các mục dưới đây:
- Lập trình driver thiết bị sử dụng ngôn ngữ C
- Ngôn ngữ script: Perl, Python, Shell Script trên Linux
- Thiết kế mạch PCB: Allegro hay Antinum
- Thiết kế sơ đồ – Schematic Design
- Build Environments: Makefile, Cmake
- Ngoài ra cần học cách tương tác với phần cứng như sử dụng các công cụ đo, test board, hay thậm chí là hàn mạch sửa mạch nếu cần
- Một số tool mà bạn có thể tham khảo trước: Cross ToolChains (Linux), Keil Embedded Tool (Windows), Putty (Windows)
Định hướng nghề nghiệp
Như đã nhắc ở trên, có 2 hướng đi lâu dài dành cho lập trình viên nhúng.
1 là trở thành 1 lập trình viên chuyên viết phần mềm cho hệ thống nhúng (Embedded software). Công việc của bạn sẽ tập trung vào việc viết code, test, viết tài liệu cho sản phẩm mà bạn tạo ra bao gồm các driver, firmware, hệ điều hành hay các ứng dụng khác chạy trên hệ thống nhúng hoặc chạy trên các nền tảng web, mobile, PC điều khiển thiết bị.
Hướng thứ 2 thì nếu có sở thích về phần cứng nhiều hơn, hãy lựa chọn trở thành 1 người chuyên thiết kế bo mạch (board) hay còn gọi là thiết kế PCB. Hướng này đòi hỏi bạn cần trang bị kiến thức sâu về phần cứng cũng như điện tử.
Cả 2 hướng đều có tương lai phát triển rất lớn vì hiện nay nhu cầu về mảng lập trình nhúng là rất cao, ngoài ra không dễ để học và hiểu sâu được, vì thế cần có sự tìm tòi, tìm hiểu và nắm vững chuyên môn mới có thể tiến xa được trong nghề này.
Kết bài
Như vậy mình đã cùng các bạn tìm hiểu về những khái niệm cơ bản nhất trong nghề lập trình viên nhúng – Embedded Developer. Qua bài viết này hy vọng các bạn có cái nhìn tổng quát hơn về lĩnh vực lập trình này cũng như định hướng rõ ràng hơn nếu các bạn có sở thích về mảng nhúng nói riêng và IoT nói chung. Cảm ơn các bạn đã đọc bài, hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.
Bài viết đăng trên blog TopDev