2009-07-07 26 views
10

Tôi là kỹ sư SW được nhúng, có ít hơn 3 năm kinh nghiệm. Tôi nhắm đến "làm sắc nét cưa" liên tục. Tôi đã tự hỏi nếu có bất cứ điều gì cụ thể cho lập trình cấp thấp mà các lập trình viên C/C++ nên thành thạo.Bộ lập trình cấp thấp nào nên có trình độ kỹ năng nào?

Điều gì đến với tâm trí của tôi là sự quen thuộc với kiến ​​trúc và bộ hướng dẫn của phần cứng. Biết làm thế nào để fiddle với bit cũng rất quan trọng, quản lý tài nguyên và hiệu suất đã được một phần công việc của tôi, là có bất cứ điều gì khác?

EDIT: Tôi làm việc với RTOS tùy chỉnh nội bộ, không nhúng Linux.

+1

Kiên nhẫn! [15chars] –

Trả lời

11

khái niệm cụ thể như thế nào,

  1. Endianness (liên kết này là một bài báo linuxjournal cũ nhưng tốt)
  2. Effective use of multithreading architectures (trang web nhúng là tốt nói chung)
  3. Debugging embeddedmultithreaded hệ thống
  4. Understand, Learn and Follow good programming techniques (liên kết rất cũ và điểm rất chung chung và chủ quan, nhưng hãy nghĩ về nó)
  5. Other things (trang IBM này trên các khoản tiền linux nhúng lên hầu hết các điểm khác mà tôi muốn thực hiện)
  6. Một điều nữa - never underestimate testing! hoặc, lập kế hoạch kiểm tra các trường hợp !!

Sử dụng liên kết tham chiếu mà tôi đưa ra làm khái niệm,
vui lòng theo dõi thêm để có kiến ​​thức sâu hơn.

+0

Có TATFT. Nếu bạn không biết nó có ý nghĩa gì, hãy tra cứu và sống theo nó! – Brian

+0

@Brian, Bạn đặt cược! Tôi đá chính mình vì đã bỏ lỡ điều đó. – nik

+0

Tôi vừa học được những gì TATFT đứng lên và cười lớn trong tủ của tôi, tôi hoàn toàn đồng ý, thực sự chúng tôi luôn TATFT trong đội của tôi và cau mày khi những nhóm đó không. –

9

Tôi muốn nghiên cứu các thiết bị điện tử của các chip thực tế. Tìm hiểu cách thức chúng hoạt động bên trong (chẳng hạn như kiến ​​trúc), giao diện với các thiết bị ngoại vi, các đặc tính thời gian và điện, vv ..

Về cơ bản, đọc bảng dữ liệu bắt đầu để hoàn thành một vài lần và tìm hiểu bất cứ điều gì bạn chưa từng thấy/sử dụng trước đây .

Nhân tiện, bạn làm việc với loại chip nào?

+0

Đồng ý. Tìm hiểu về các khía cạnh kỹ thuật điện/điện tử của máy tính! – Noldorin

+0

Tôi làm việc với ARM9 cho bộ điều khiển và C55 cho DSP, cũng giúp viết trình điều khiển cho các loại RF, AD/DA và Power Amp IC. –

3

Có sự hiểu biết tuyệt vời với các con trỏ, việc kiểm tra các ngôn ngữ này không làm được nhiều (như tràn bộ đệm và các công cụ tương tự), thiết bị điện tử kỹ thuật số. Các hệ thống hoạt động bên trong cũng có thể hữu ích.

Tìm hiểu cách nội dung được thể hiện trong nội bộ, cấu trúc dữ liệu được tạo sẵn đặc biệt (giả sử bạn không xây dựng cấu trúc của riêng mình).

Trên hết, thực hành rất nhiều. Làm điều đó mang lại nhiều hơn cho bạn nhiều hơn là chỉ đọc về nó;)

4

Nếu bạn chưa nghĩ rằng mọi Kỹ sư phần mềm nên đọc Lập trình thực dụng và Hoàn thành mã. Tôi biết những điều này không dành riêng cho lập trình cấp thấp, nhưng có một lượng kiến ​​thức lớn trong đó áp dụng cho tất cả các ngành phụ.

+0

Tôi có những cuốn sách này và đọc chúng. Tôi nghĩ chúng đều tuyệt vời. –

+0

* Thực tiễn của Nhà phát triển Agile * là phần tiếp theo của * Trình lập trình thực dụng * và cũng là một cuốn sách rất hay. – Imagist

7

Tương tự như những gì Brian said, học cách tạo kiểm tra đơn vịtự động xây dựng.

Những kỹ năng này là tốt cho tất cả các cấp độ của kỹ sư phần mềm thành thạo. Chúng sẽ giúp cải thiện chất lượng mã của bạn đồng thời giúp việc tái cấu trúc và cải thiện cơ sở mã dễ dàng hơn.

+0

Tốt nhưng không phải là duy nhất cho các hệ thống nhúng. –

2
  • hoạt động chút
  • bộ xử lý kiến ​​trúc (bộ nhớ đệm, vv)
  • wcet phân tích
  • lịch

Edit: Những gì tôi quên đề cập đến là mô hình phát triển dựa. Hôm nay, các thuật toán kiểm soát thường được thực hiện như một loại automaton mà từ đó mã C được tạo ra sau đó. Các công cụ có sẵn thương mại là ví dụ MATLAB/Simulink, ASCET hoặc SCADE.

+0

Tôi không biết về những gì wcet đứng cho, tôi googled nó và tìm thấy this page. Tôi chỉ học được một cái gì đó mới, cảm ơn !. –

1

Tự lấy bản sao của cuốn sách MISRA-C. Nó ban đầu được viết bởi các thành viên của ngành công nghiệp ô tô, và cố gắng làm cho phần mềm được viết bằng C mạnh mẽ hơn bằng cách áp dụng một số (một số lượng khá lớn!) Của các quy tắc và hướng dẫn.

Sau đó, mua PC-Lint (hoặc công cụ phân tích tĩnh khác) để kiểm tra mã của bạn cho MISRA và các quy tắc khác.

Những điều này đặc biệt liên quan đến cấp độ C và nhúng C, vì chúng xử lý các nguyên nhân gây ra nhiều lỗi trong phần mềm như vậy, chẳng hạn như các vấn đề liên quan đến con trỏ, rò rỉ bộ nhớ. về điều đó trong cuốn sách MISRA), tính cuối cùng và hành vi không xác định.

13

Tôi thấy rất nhiều câu trả lời về hệ điều hành cấp cao ở đây, nhưng bạn đặc biệt cho biết mức độ thấp.

Vài suy nghĩ rải rác:

  • thiết kế để thử nghiệm. Khi bạn làm việc thông qua một vấn đề chỉ thay đổi một điều tại một thời điểm cho mỗi thử nghiệm.
  • Bạn cần hiểu các giao diện và giao diện, spi, i2c, usb, ethernet, vv Giao diện số một, hôm nay, hôm qua và ngày mai, uart, nối tiếp.
  • Các bước liên quan đến lập trình flash.
  • Thủ thuật để tránh làm cho sản phẩm dễ dàng brickable.
  • Trình tải khởi động nói chung.
  • Bit-đập trên các giao diện được nêu trên các họ khác nhau của các bộ phận (chip khác nhau nhà cung cấp có ý tưởng khác nhau về chân io, kéo lên, hướng điều khiển, v.v ...).
  • Board và chip mang lên, bạn chắc chắn không bao giờ muốn khởi động hàng chục nghìn dòng mã chương trình trên đầu tiên bật lên (suy nghĩ dẫn đầu, tắt).
  • Cách gỡ lỗi một sản phẩm mà không sử dụng quá nhiều thiết bị kiểm tra (máy phân tích hợp lý và phạm vi), đồng thời bạn phải học cách sử dụng phạm vi để gỡ lỗi, bạn còn xa hơn có giá trị hơn nếu bạn KHÔNG CÓ một kỹ sư hoặc kỹ sư trong phòng thí nghiệm với bạn.
  • Làm cách nào để bạn lập trình lại đơn vị trong trường? Điều gì sẽ bạn làm gì để giảm thiểu lỗi của con người khi cho phép người dùng vào trường nâng cấp thiết bị? Nhớ trường hạ cấp xuống.
  • Bạn sẽ làm gì để ngăn cản việc hack (mã nhị phân, v.v.).
  • Sử dụng hiệu quả flash/rom (không sử dụng hết một ngân hàng hoặc phần, trải rộng sự hao mòn xung quanh hoặc xem đèn flash có hoạt động với bạn hay không).
  • Cách thức và thời điểm sử dụng bộ đếm giờ giám sát.
  • Máy trạng thái, rất hữu ích với các luồng (nối tiếp và ethernet), cấu trúc gói thiết kế truyền trực tuyến và được thiết kế phù hợp với máy trạng thái và có tiêu đề và kiểm tra hoặc cấu trúc khác đảm bảo bạn không diễn giải gói một phần hoặc dữ liệu ngẫu nhiên như một gói tin tốt.
+1

+1, tôi cần nhiều phiếu bầu hơn! –

+0

Bài đăng hay. Tôi sẽ thêm điều đó khi xây dựng các ứng dụng nhúng, khả năng gỡ lỗi của bạn ít hơn và thiết kế dự kiến ​​trở nên tuyệt đối cần thiết nhiều hơn là trong môi trường thân thiện khi bạn được sandbox và bạn sẽ không làm hỏng mã ở nơi khác. Ngoài ra, lật đến sai hoặc dereferencing một con trỏ lơ lửng có hậu quả thực sự ở đây, không giống như trên chương trình máy tính để bàn nơi tồi tệ nhất bạn nhận được là một chương trình sụp đổ. Chương trình phòng thủ, ngay cả khi bạn không thấy nhu cầu mạnh mẽ. –

+0

có, chương trình phòng thủ, tôi thích thuật ngữ đó. cũng biết khi nào đi ngược lại tiêu chuẩn như các biến toàn cục hơn và ít người dân địa phương hơn. Không luôn luôn giả định rằng .bss và.dữ liệu đã được thiết lập (bởi vì bạn không làm điều đó), và đã chọn một thay thế. Quản lý năng lượng, ngày càng nhiều thứ cạn kiệt pin. Phải mất ít năng lượng hơn để lưu trữ 1 trong một rom so với 0. Tiết kiệm đến nv ram khi bị ngắt điện. Wakeup, xử lý sự kiện, quay trở lại chế độ năng lượng thấp. –

1

Câu hỏi hay. Một số chưa được đề cập ...

Tìm hiểu các tùy chọn khác nhau của bạn để đạt được đa nhiệm ở mức độ thấp. Từ các bộ lập lịch vòng tròn cơ bản (không được ưu tiên), với các dấu thời gian từ bộ hẹn giờ phần cứng, đến RTOS ưu tiên. Tìm hiểu lý do tại sao bạn có thể cần RTOS và tại sao bạn có thể không cần đến RTOS. Nếu bạn sử dụng RTOS, hãy tìm hiểu rằng người mới bắt đầu với nền tảng PC có thể có xu hướng muốn tạo quá nhiều tác vụ.

Khả năng hiển thị vào bên trong để gỡ lỗi có thể là một thách thức. Không có màn hình điển hình, vì vậy không ném vào "printf" cuộc gọi bất cứ nơi nào bạn muốn. Một giả lập hoặc giao diện JTAG là lý tưởng - bạn có thể thiết lập các điểm ngắt và bước qua chương trình của bạn (miễn là ngắt vi không làm cho phần cứng phát điên, như vung cánh tay robot xung quanh ở tốc độ đầy đủ!). Nếu giả lập/JTAG không có sẵn, hãy tìm hiểu cách sử dụng cổng nối tiếp dự phòng (hoặc thậm chí bit-bash một ghim để tạo cổng nối tiếp) cho kênh gỡ lỗi, với một số lệnh poke/poke bộ nhớ đơn giản.

Các vấn đề liên quan