Tôi đã làm việc trên một số hệ thống nhúng khác nhau. Họ đã sử dụng tất cả typedef
s (hoặc #defines
) cho các loại như UINT32
.Khi nào tôi nên sử dụng kiểu trừu tượng trong các hệ thống nhúng
Đây là một kỹ thuật tốt vì nó thúc đẩy nhà kích thước của các loại để các lập trình viên và làm cho bạn ý thức hơn về cơ hội cho tràn, vv
Nhưng trên một số hệ thống bạn biết rằng trình biên dịch và xử lý sẽ không thay đổi cho cuộc sống của dự án.
Vậy điều gì sẽ ảnh hưởng đến quyết định của bạn để tạo và thực thi các loại dự án cụ thể?
EDIT Tôi nghĩ rằng mình đã mất được ý chính của câu hỏi của mình và có thể thực sự là hai.
Với chương trình nhúng, bạn có thể cần loại kích thước cụ thể cho giao diện và cũng để đối phó với các tài nguyên bị hạn chế như RAM. Điều này không thể tránh được, nhưng bạn có thể chọn sử dụng các kiểu cơ bản từ trình biên dịch.
Đối với mọi thứ khác, các loại này ít quan trọng hơn.
Bạn cần phải cẩn thận không gây tràn và có thể cần xem ra để đăng ký và sử dụng ngăn xếp. Điều này có thể dẫn bạn đến UINT16
, UCHAR
. Tuy nhiên, việc sử dụng các loại như UCHAR
có thể thêm trình biên dịch 'fluff'. Bởi vì thanh ghi thường lớn hơn, một số trình biên dịch có thể thêm mã để buộc kết quả vào loại.
i++;có thể trở thành
ADD REG,1 AND REG, 0xFFkhông cần thiết.
Vì vậy, tôi nghĩ rằng câu hỏi của tôi cần phải có được: -
cho những hạn chế của phần mềm nhúng những gì là chính sách tốt nhất để đặt cho một dự án mà sẽ có nhiều người làm việc trên nó - không phải tất cả trong số họ sẽ được cùng một mức độ kinh nghiệm.
Một tinh chỉnh khác mà tôi đã thấy và đánh giá cao là sử dụng các loại FIXED và các loại "USE BEST". ví dụ: typedef unsigned char UINT8 typedef unsigned uint255; uint 255 chỉ định phạm vi giá trị, nhưng cho phép kích thước tối ưu được chỉ định cho mỗi hệ thống – itj
@itj: Thay vì uint255, sử dụng 'uint_fast8_t' từ' stdint.h'. Nó được định nghĩa là kiểu nhanh có thể hỗ trợ giá trị 8 bit không dấu. Trên một nền tảng, đó có thể là một 'unsigned char'. Ngày khác nó có thể chỉ đơn giản là một 'unsigned int'. – tomlogic
Điều này là tốt cho đến khi mã của bạn phải hoạt động trên một bộ xử lý rất hạn chế và bạn muốn hoặc phải thử nghiệm trên một bộ xử lý khác, có lẽ vì thử nghiệm và gỡ lỗi trên đích thực là khó/không thể. Trong tình huống này, bạn cần phải thử nghiệm trên máy chủ lưu trữ của bạn với các biến có cùng kích thước với mục tiêu và nếu bạn đã mã hóa bằng typedefs kích thước cụ thể, quy trình của bạn sẽ hoàn toàn bị bẻ khóa. – barny