+1 👍
444 lượt xem
bởi
Em chào tất cả mọi người, em hiện đang là một sinh viên năm 2 ngành Kỹ thuật điều khiển và tự động hóa. Em có dự định đi theo hướng Software Embedded nhưng không biết bắt đầu từ đâu ạ. Em cảm thấy bản thân học khá tốt C/C++, cấu trúc dữ liệu và giải thuật của em cũng khá tốt ạ, ngoài ra em có biết một chút ít về Java. Còn về phần cứng các môn về điện tử hay vi xử lý cũng ở mức khá. Em có tìm hiểu thì nhận thấy có 2 định hướng là Embedded linux và Embedded Automotive. Mọi người có thể cho em xin kinh nghiệm và lời khuyên được không ạ? Cho em hỏi thêm là một Software Embedded thì có cần biết quá nhiều về phần cứng không ạ? Em cảm ơn nhiều <3

1 Câu trả lời

+1 👍
bởi (🏅167)
E nó đang học tại Nga, hôm qua 2 ae đã kết nối và trao đổi trực tiếp. Tóm tắt lại mình chia sẻ cho e nó mấy keypoint trong phạm vi hiểu biết của mình như sau.
 
Embedded SW thì nó cũng có nhiều loại, hiện a thấy có mấy loại sau trong ngành mà a đã gặp và làm trực tiếp với họ:
 
1. Phát triển Device Driver, Kernel, HAL, BSP ==> Đại khái là làm phần mềm ở mức sâu, gần với OS và HW
- Viết code tương tác trực tiếp với phần cứng
- Chủ yếu dùng ngôn ngữ C
- Cần có kiến thức về vi điều khiển (MCU) và các thiết bị ngoại vi
- Cần có knowledge về các giao thức truyền thông như UART, SPI, I2C, Ethernet, CAN, LIN, FlexRay, USB

2. Phát triển Service (middleware) ==> Tầng ở giữa Application và OS/HW
  • Service không tương tác trực tiếp với User mà tương tác với tầng dưới (device driver, OS), các service khác và  tầng trên:(các application)
  • Để code đc service thì cần am hiểu về 1 protocol hoặc technology nào đó, ví dụ:
    • Bluetooth service: Bluetooth stack, bluetooth profile
    • Carplay service : Bluetooth, Wifi, iAP
    • Usb Media service: USB, Audio/Video container
    • Media Streaming service: RTSP (realtime streaming protocol)
    • etc 
3. Phát triển Application
  • Application là Layer cao nhất trong kiến trúc của Embedded Software, tương tác trực tiếp với User
  • Là layer chứa nhiều business logic nhất, cần có giao diện (HMI) để tương tác với user
  • Application cũng là phần dễ thay đổi yêu cầu nhất trong hệ thống
    Do đó các kỹ năng và kiến thức khác (ngoài ngôn ngữ lập trình) để có thể làm tốt phần Application, đó là:
  • Kiến thức về domain: Làm Automotive thì cần có kiến thức về xe, làm IoT thì cần có kiến thức về SmartHome, Smart City, etc
  • Có kiến thức về design pattern để làm sào thiết kế App dễ maintain, dễ đáp ứng với thay đổi, dễ mở rộng
  • HMI framework : Qt, Kanzi, CGI, Embedded Wizard, etc.
  • OS: Linux, QNX, INTEGRITY, FreeRTOS, etc.
  • Platform: GENIVI, AGL, Android Automotive
  • Cross compile: Yocto
==> kiến thức về HW là ko quá quan trọng nếu e làm Middleware hoặc Application.
 
Tham khảo thêm : https://cppdeveloper.com/tech360/hanh-tau-giang-ho-cung-cpp/
 
 
Coding Guru là nơi dành cho cộng đồng lập trình viên Việt Nam hỗ trợ nhau về tất cả các vấn đề liên quan đến công nghệ.

Chúng ta hãy cùng nhau xây dựng một cộng đồng công nghệ Việt Nam mạnh mẽ, thúc đẩy và giúp đỡ nhau cùng phát triển, thăng tiến trong sự nghiệp.

***
Nơi đam mê hội tụ
***
...