C nhúng Mã hóa Chuẩn
Table of Contents
Giới thiệu 5
Mục đích của tiêu chuẩn 5
nguyên tắc hướng dẫn 6
Thi hành Hướng dẫn 10
Độ lệch Thủ tục 10
Lời cảm ơn 11
Copyright Notice 11
Rules 1 chung 13
1.1 Những C? 13
1.2 Dòng Widths 15
1.3 Niềng răng 17
1.4 Dấu ngoặc 19
viết tắt 1.5 Common 21
1.6 Casts 23
1.7 Từ khoá để Tránh 25
1.8 Từ khoá để thường xuyên 27
2 Comments 30
2.1 Các định dạng được chấp nhận 30
2.2 Địa điểm và nội dung 32
3 trắng Space 37 3.1 Không gian 37 3.2 Alignment 41 3.3 Dây chuyền Trống 43 3.4 lõm 44 3.5 Tabs 47 3.6 Linefeeds 49 4 Mô-đun 50 4.1 Quy ước đặt tên 50 4.2 Tiêu đề tập tin 52 4.3 Nguồn tập tin 55 4.4 File Templates 57 5 kiểu dữ liệu 58 5.1 Quy ước đặt tên 58 5.2 FixedWidth số nguyên 61 5.3 Số nguyên Signed 63 5.4 Floating điểm 65 5.5 Cấu trúc và đoàn 67 6 Thủ tục 68 6.1 Quy ước đặt tên 68 6.2 Chức năng 71 6.3 FunctionLike Macros 73 6.4 Nhiệm vụ 75 6.5 Interrupt Service Routines 77 7 biến 79 7.1 Quy ước đặt tên 79 7.2 Khởi tạo 82 8 Expressions và báo cáo 84 8.1 Khai báo biến 84 8.2 IfElse báo cáo 85 8.3 Chuyển báo cáo 89 8.4 Loops 91 8.5 Unconditional Jumps 93 8.6 Tính tương đương Tests 95 Tài liệu tham khảo 96 Phụ lục A: Tiêu đề file Template 98 Phụ lục B: Source File Mẫu 99 Phụ lục C: Chuẩn viết tắt 100 Giới thiệu Mục đích của tiêu chuẩn Lý do chính cho việc áp dụng này mã hóa tiêu chuẩn là để giảm số lượng các lỗi có trong phần mềm mới nhúng (aka, firmware) và trong mã sau thêm hoặc thay đổi bởi người duy trì. Vì lý do này, các quy định cụ thể trong tài liệu này mô tả các kỹ thuật để loại bỏ hoặc giảm số lượng các lỗi trong một chương trình được gắn thẻ với Zero Bugs ... Thời gian biểu tượng ™ dưới đây. Tất nhiên, một tiêu chuẩn mã hóa có thể không tự loại bỏ tất cả các lỗi từ một hệ thống nhúng phức tạp. Tiêu chuẩn mã hóa này là một phần của Zero Bugs ... Thời kỳ phương pháp thiết kế firmware ™. Zero, Bugs ... Thời gian nhấn mạnh vai trò quan trọng của đào tạo phát triển, phần mềm và kiến trúc hệ thống, quá trình hiệu quả trọng lượng nhẹ, và văn hóa của một nhóm hay tổ chức trong việc giữ lỗi ra. Lý do quan trọng khác cho việc áp dụng tiêu chuẩn mã hóa này bao gồm tăng khả năng đọc và tính di động của phần mềm , do firmware có thể được duy trì và tái sử dụng với chi phí thấp hơn. Một tiêu chuẩn mã hóa lợi ích cho một nhóm các nhà phát triển và các tổ chức lớn hơn bằng cách giảm thời gian yêu cầu của cá nhân để hiểu hoặc xem xét lại công việc của đồng nghiệp. Hướng dẫn nguyên tắc tiêu chuẩn mã hóa này đã được phát triển phù hợp với các nguyên tắc sau đây hướng dẫn, mà phục vụ để tập trung sự chú ý của các tác giả và loại bỏ các xung đột về mặt hàng mà đôi khi được xem bởi các lập trình viên như sở thích phong cách cá nhân: 1. Lập trình viên cá nhân không sở hữu các phần mềm mà họ viết. Tất cả phát triển phần mềm là công việc cho thuê cho một chủ nhân hay một khách hàng và, do đó, các sản phẩm cuối cùng phải được xây dựng một cách như người thợ. 2. Nó là rẻ hơn và dễ dàng hơn để ngăn chặn một lỗi từ len lỏi vào mã hơn là để tìm và tiêu diệt nó sau khi nó đã nhập vào. Một chiến lược quan trọng trong cuộc chiến này là để viết mã trong đó trình biên dịch, trình liên kết, hoặc một công cụ phân tích tĩnh có thể phát hiện lỗi tự động-tức là, trước khi mã được phép thực hiện. 3. Cho tốt hơn hoặc tồi tệ hơn (tốt, chủ yếu là tồi tệ hơn), các tiêu chuẩn ISO "standard1" ngôn ngữ lập trình C cho phép một số lượng đáng kể các biến đổi trong các quyết định của người thực hiện biên dịch. Những nhiều cái gọi là "thực hiện xác định", "không xác định", và "" hành vi, cùng với "không xác định cụ thể lựa chọn locale-", có nghĩa là chương trình biên dịch từ mã nguồn C giống hệt nhau có thể cư xử rất khác nhau tại thời gian chạy. Khu vực màu xám như trong các ngôn ngữ tiêu chuẩn làm giảm đáng kể tính di động của các chương trình C mà không cẩn thận. 4. Tiêu chuẩn mã hóa ưu tiên các mã và độ tin cậy tính di động trên hiệu quả thực hiện hoặc lập trình thuận tiện. 5. Có rất nhiều nguồn lỗi trong các chương trình phần mềm. Các lập trình ban đầu tạo ra một số lỗi. Lỗi khác dẫn đến từ sự hiểu lầm của những người sau này duy trì, mở rộng, cổng, và / hoặc sử dụng lại mã. 1 [C90] và [C99] • Số lượng và mức độ nghiêm trọng của lỗi được giới thiệu bởi các lập trình ban đầu có thể được giảm xuống thông qua sự phù hợp xử lý kỷ luật nhất định thực hành mã hóa, chẳng hạn như vị trí của các hằng số ở phía bên trái của một tương đương (==) thử nghiệm. • Số lượng và mức độ nghiêm trọng của lỗi được giới thiệu bởi các lập trình bảo trì cũng có thể bị ảnh hưởng bởi các lập trình ban đầu. Ví dụ, việc sử dụng các loại nguyên chiều rộng cố định di động (ví dụ, int32_t) đảm bảo rằng không có cổng tương lai của mã này sẽ gặp phải một tràn bất ngờ. • Số lượng và mức độ nghiêm trọng của lỗi được giới thiệu bởi các lập trình bảo trì cũng có thể được giảm thông qua việc sử dụng kỷ luật thực hành phù hợp cho ý kiến và phong cách, để mọi người trong một tổ chức có thể dễ dàng hiểu được ý nghĩa và sử dụng hợp lý các biến, chức năng, và các mô-đun. 6. Hướng dẫn Misra cho việc sử dụng các C Language2 có nhiều hạn chế hơn so với mã hóa tiêu chuẩn nhưng điều này xứng đáng nghiên cứu. Độ lệch từ bất kỳ quy tắc yêu cầu hoặc tư vấn Misra-C cần được xem xét một cách cẩn thận. Các tác giả của các hướng dẫn Misra-C có kiến thức về những nguy cơ của việc sử dụng của C trong các hệ thống an toàn quan trọng. Vài sự khác biệt của chúng tôi biết ý kiến với [MISRA04] được xác định trong các chú thích với chuẩn này. Những người theo tiêu chuẩn mã hóa Netrino của thể muốn áp dụng các quy định khác của Misra-C, thêm vào các quy tắc tìm thấy ở đây. 7. Để có hiệu quả, tiêu chuẩn mã hóa phải được thực thi. Bất cứ nơi nào hai hay nhiều quy tắc cạnh tranh sẽ là tương tự như vậy có thể ngăn ngừa lỗi nhưng chỉ một trong những quy tắc có thể được thực thi tự động, các quy tắc thực thi hơn là khuyến khích. Trong trường hợp không có một quy tắc cần thiết hoặc một cuộc xung đột giữa các quy tắc, tinh thần của các nguyên tắc trên nên được áp dụng để hướng dẫn các quyết định. 2 [MISRA98] và [MISRA04] Thực thi Hướng dẫn sự phù hợp với các tiêu chuẩn mã hóa này là bắt buộc. Không phù hợp đang được thực hiện để đáp ứng các tiêu chuẩn tối thiểu. Không phù hợp đang được phát hiện và loại bỏ thông qua quét tự động, giám định mã chính thức, hoặc khám phá thức. Tất cả các mã được gửi cho một bản phát hành của phần mềm sẽ phù hợp với các tiêu chuẩn, trừ khi một sự sai lệch đã được cho phép. Deviation Procedure Ở cấp dự án, đó là chấp nhận được đối với một tiêu chuẩn mã hóa (ví dụ như các tiêu chuẩn mã hóa của một khách hàng hoặc đối tác) được thông qua thay vì một này. Trong trường hợp đó, tất cả các thành viên của nhóm dự án phải thực hiện theo các tiêu chuẩn mã hóa được lựa chọn. Ở cấp module, nó chỉ là chấp nhận được để đi chệch khỏi tiêu chuẩn mã hóa này với sự chấp thuận của người quản lý dự án. Lý do cho sự sai lệch và tên của người phê duyệt phải được nêu càng gần càng tốt để các phạm vi của độ lệch. Ví dụ, một độ lệch duy nhất trong một chức năng nên được ghi chép trong một bình luận khối trong hoặc trên chức năng, nào là hữu ích nhất cho người đọc tiếp theo. Lời cảm ơn Mặc dù tên của tôi là người duy nhất trên mặt trước của cuốn sách này, sự phát triển của Netrino của C nhúng Mã hóa Chuẩn là một nỗ lực hợp tác, liên quan đến nhiều tại Netrino cộng với các thành viên khác của cộng đồng phần mềm nhúng. Tôi đặc biệt biết ơn Nigel Jones, Jack Ganssle, Jean Labrosse, và Miro Samek cho xuất bản firmware mã hóa tiêu chuẩn trước đó; để Netrino của Joe Perret và Salomon Singer để nhận dự án này được tiến hành một cách lớn; Andrew Girson cho rất nhiều những cuộc tranh luận với Zero Bugs ... Thời gian; Elizabeth Gallauresi để xử lý chi tiết khác nhau; và tất cả các nhận xét kỹ thuật nhiều người đã cung cấp thông tin phản hồi quan trọng, bao gồm Mike Ficco, JR Simma, Dan Smith, Michael Wilk, và một số các folks khác đã được xác định. Notice Copyright tài liệu này và các thông tin mà nó chứa là Copyright © 2009 Netrino, LLC (www.netrino.com). Đó là cho phép đối với các cá nhân, công ty, và các tổ chức để áp dụng tất cả hoặc một số các quy tắc mã hóa tài liệu này; thực sự chúng ta hy vọng nhiều người sẽ. Điều này có thể được thực hiện đơn giản bằng cách xác định các Netrino Embedded C Mã hóa chuẩn, và giữ lại đoạn này trong toàn bộ của nó. Tất cả các quyền khác được bảo vệ bởi Netrino, LLC. 1 Quy định chung 1.1 Trong đó C? Rules: a. Tất cả các chương trình được viết để thực hiện theo các tiêu chuẩn ISO mới nhất có sẵn cho ngôn ngữ lập trình C, hiện đang là [C99] .3 b. Bất cứ khi nào một trình biên dịch C ++ được sử dụng, tùy chọn biên dịch thích hợp được thiết lập để hạn chế ngôn ngữ mới nhất của tiêu chuẩn C tập con được hỗ trợ bởi trình biên dịch. C. Việc sử dụng các phần mở rộng ngôn ngữ biên dịch độc quyền từ khóa, #pragmas, và lắp ráp nội tuyến phải được giữ ở mức tối thiểu cần thiết để có được công việc làm và được địa phương hoá một số lượng nhỏ của các mô-đun trình điều khiển thiết bị có giao diện trực tiếp đến hardware.4 3 này lệch khỏi [ MISRA04] Quy tắc 1.1. Trình biên dịch tương thích với [C99] cung cấp nhiều cải tiến đáng giá, bao gồm hỗ trợ cho các loại nguyên chiều rộng cố định, C ++ comments phong cách, khả năng để khai báo các biến tự động khi cần thiết, và các chức năng nội tuyến. Trong sự vắng mặt của một [C99] -compliant trình biên dịch, một [C90] biên dịch -compliant sẽ được sử dụng. 4 Điều này dường như đi chệch khỏi [MISRA04] Quy tắc 1.1, nhưng phù hợp với quy định 2.1 và 3.4, cũng như Misra-lường độ lệch từ Rule 1.1. Lý luận: Ngay cả C "tiêu chuẩn" thay đổi bởi trình biên dịch, nhưng chúng ta cần phổ biến của một nền tảng như chúng ta có thể tìm thấy để làm tốt các quy tắc và cơ chế thực thi tiếp theo. C ++ là một ngôn ngữ khác nhau và việc sử dụng C ++ và C không nên được trộn lẫn trong cùng một thiết kế; C ++ lập trình nên tham khảo ý kiến Embedded C Netrino của ++ Mã hóa chuẩn, mà về bản chất khác từ tài liệu này. Ngoại lệ: Những quy định này có thể được bỏ qua trong các trường hợp đó, trình biên dịch chỉ hỗ trợ một phiên bản cũ của chuẩn C. Enforcement: Những quy định này sẽ được thi hành trong đánh mã . 1.2 Dòng Widths Rules: a. Chiều dài của tất cả các dòng trong một chương trình được giới hạn tối đa là 80 ký tự. Reasoning: Cod
đang được dịch, vui lòng đợi..
