SDCC 4.6.0: Trình biên dịch C mã nguồn mở cho vi điều khiển nhận tài trợ lớn từ NGI0 và Sovereign Tech Fund
SDCC – bộ trình biên dịch C chuẩn, tối ưu và có thể nhắm tới nhiều dòng vi điều khiển – vừa phát hành bản 4.6.0 Release Candidate 2. Dự án cũng công bố hai khoản tài trợ quan trọng từ NGI0 Commons Fund và Sovereign Tech Fund, hứa hẹn cải thiện hỗ trợ phần cứng, chuẩn C hiện đại và bảo mật firmware nhúng.

SDCC 4.6.0: Trình biên dịch C mã nguồn mở cho vi điều khiển nhận tài trợ lớn từ NGI0 và Sovereign Tech Fund
SDCC (Small Device C Compiler) là bộ trình biên dịch C chuẩn (ANSI C89, ISO C99, ISO C11, ISO C23) có khả năng tái nhắm mục tiêu (retargetable) và tối ưu hóa, chuyên dùng cho các dòng vi điều khiển 8-bit và 16-bit. Dự án vừa phát hành bản 4.6.0 Release Candidate 2 đồng thời công bố hai khoản tài trợ quan trọng giúp đẩy nhanh quá trình phát triển.
SDCC hỗ trợ những nền tảng phần cứng nào?
SDCC có thể biên dịch mã C cho nhiều kiến trúc vi điều khiển khác nhau, bao gồm:
- Intel MCS51: các vi xử lý 8031, 8032, 8051, 8052...
- Maxim (trước đây là Dallas): các biến thể DS80C390
- Freescale (trước đây là Motorola): họ HC08 (hc08, s08)
- Zilog Z80: Z80, Z80N, Z180, SM83, Rabbit 2000/2000A/3000A/4000, TLCS-90, eZ80, R800
- Padauk: pdk14, pdk15
- STMicroelectronics STM8
- MOS 6502 và WDC 65C02
Ngoài ra, dự án đang trong quá trình bổ sung hỗ trợ cho Rabbit 5000, 6000, Padauk pdk13 cùng các mục tiêu f8 và f8l. Các nền tảng Microchip PIC16 và PIC18 hiện không còn được duy trì tích cực.
Điểm mạnh của SDCC nằm ở khả năng tái nhắm mục tiêu — về lý thuyết, nó có thể được điều chỉnh để hỗ trợ thêm nhiều vi xử lý khác nếu cộng đồng có nhu cầu.
Lịch sử và quá trình phát triển cộng đồng
SDCC ban đầu được viết bởi Sandeep Dutta và phát hành theo giấy phép GPL. Từ tháng 12/1999, mã nguồn được chuyển lên SourceForge, cho phép cộng đồng người dùng và nhà phát triển cùng truy cập vào một cây mã nguồn chung. Kể từ đó, SDCC liên tục được cập nhật nhờ đóng góp từ cả người dùng lẫn lập trình viên.
Một điểm đáng chú ý: SDCC chủ yếu được phát triển bởi các tình nguyện viên không được trả lương. Thỉnh thoảng dự án nhận được hỗ trợ từ các trường đại học (cho phép nhân viên dành thời gian làm việc được trả lương cho SDCC) hoặc nhà sản xuất vi điều khiển gửi mẫu phần cứng. Tuy nhiên, mô hình này bộc lộ hạn chế rõ rệt — khi một lập trình viên có vài giờ rảnh để bắt đầu sửa lỗi hoặc phát triển tính năng nhưng không thể hoàn thành, việc quay lại sau một thời gian dài thường tốn thêm công sức để "làm nóng" lại mạch suy nghĩ.
Hai khoản tài trợ lớn: NGI0 Commons và Sovereign Tech Fund
Chính vì những hạn chế trên, các nhà phát triển SDCC đã nộp đơn xin tài trợ và mới đây đã có hai đơn được chấp thuận.
Có nguồn kinh phí để làm việc trên SDCC thực sự hữu ích — thay vì phải dừng công việc để quay lại với các dự án được trả lương khác, tôi có thể tiếp tục làm tính năng hoặc sửa lỗi vì đó cũng là công việc được trả lương.
NGI0 Commons Fund
Quỹ này tài trợ cho việc cải thiện hỗ trợ SDCC cho nhiều phần cứng mục tiêu cũng như các cải tiến độc lập với kiến trúc nhằm giúp SDCC cạnh tranh hơn với các trình biên dịch độc quyền.
Các cải tiến phần cứng cụ thể bao gồm:
- Cải thiện hỗ trợ cho các vi điều khiển giá rẻ phổ biến của Padauk
- Cải thiện hỗ trợ cho các vi điều khiển Rabbit thường gặp trong các thiết bị IoT đời cũ
- Cải thiện hỗ trợ cho vi điều khiển Toshiba TLCS
Về phía độc lập kiến trúc, dự án tập trung vào:
- Nâng cao hỗ trợ cho các chuẩn ISO C hiện đại
- Tối ưu hóa giảm sử dụng bộ nhớ cho biến cục bộ
- Triển khai tối ưu hóa tại thời điểm liên kết (link-time optimization) để loại bỏ các hàm và đối tượng không dùng đến — đây là tính năng được người dùng SDCC yêu cầu nhiều nhất trong những năm gần đây
Dự án này được thực hiện chung bởi năm nhà phát triển SDCC.
Sovereign Tech Fund (STF)
Quỹ này đặt hàng công việc cải thiện SDCC về an toàn và bảo mật cho firmware nhúng. Các nội dung chính gồm:
- Cải thiện hỗ trợ các khía cạnh của chuẩn C hiện đại liên quan đến an toàn và bảo mật
- Chuẩn bị SDCC cho mật mã hậu lượng tử (post-quantum cryptography)
- Nghiên cứu các biện pháp giảm thiểu tấn công kênh bên (side-channel attack)
- Nâng cao độ tin cậy của SDCC thông qua kiểm thử mở rộng, bao gồm cả các tổ hợp tham số dòng lệnh ít được sử dụng
Dự án STF do một nhà phát triển SDCC đảm nhiệm.
Ý nghĩa thực tế: Ví dụ về firmware IoT
Hãy hình dung tất cả những cải tiến này hội tụ lại khi bạn viết firmware cho một thiết bị IoT dựa trên SoC eZ80 hoặc Rabbit 4000. Lập trình viên SDCC sẽ được hưởng lợi từ:
- Hỗ trợ tốt hơn cho kiến trúc mục tiêu
- Các tính năng C hiện đại giúp viết code hiệu quả và thuận tiện hơn
- Tối ưu hóa cấp cao tổng quát (thuộc dự án NGI0 Commons)
- Các tính năng C hiện đại liên quan đến an toàn và bảo mật, giúp tránh lỗi trong mã người dùng
- Mã sinh ra hiệu quả, không bị rò rỉ kênh bên cho các thuật toán mật mã hiện đại (thuộc dự án STF)
- Firmware biên dịch và chạy ổn định hơn nhờ kiểm thử được cải thiện và các lỗi trình biên dịch được sửa
Nền tảng được hỗ trợ chính thức và cách cài đặt
Các nền tảng được hỗ trợ chính thức bao gồm:
- GNU/Linux trên amd64 và GNU/Linux trên x86
- Microsoft Windows trên amd64
- macOS trên amd64
SDCC biên dịch native trên GNU/Linux và macOS bằng gcc. Các bản build Windows được tạo bằng cách biên dịch chéo sang mingw32 trên máy chủ Linux. SDCC cũng được biết là hoạt động trên GNU/Linux aarch64, GNU/Linux ppc64 và FreeBSD aarch64.
Người dùng Windows có thể thử Cygwin hoặc các script build Microsoft Visual C++ (không được hỗ trợ chính thức).
Các bản phát hành mới nhất, bao gồm mã nguồn và gói nhị phân cho Linux amd64, Windows x86/amd64 và macOS, có sẵn tại trang tải xuống SourceForge.
Lưu ý cho người dùng Việt Nam: Nhiều bản phân phối Linux phổ biến (Ubuntu, Fedora, Debian...) đã đóng gói SDCC trong kho chính thức, nhưng các gói này thường lỗi thời. Người dùng nên tự biên dịch bản phát hành chính thức mới nhất hoặc tải nhị phân có sẵn từ SourceForge để có đầy đủ tính năng mới.
Truy cập mã nguồn và báo lỗi
SDCC luôn trong quá trình phát triển tích cực. Người dùng được khuyến khích tải các bản snapshot nếu gặp lỗi hoặc nếu bản phát hành chính thức đã cũ hơn hai tháng.
Mã nguồn phát triển mới nhất có thể truy cập qua Subversion:
svn checkout svn://svn.code.sf.net/p/sdcc/code/trunk/sdcc sdcc
Trước khi báo lỗi, hãy kiểm tra phiên bản SDCC và ngày build bằng tùy chọn -v, đồng thời đính kèm đầy đủ chuỗi phiên bản trong báo cáo:
sdcc/bin > sdcc -v
SDCC : mcs51/gbz80/z80/avr/ds390/pic14/TININative/xa51 2.3.8 (Feb 10 2004) (UNIX)
Các nhà phát triển SDCC đặc biệt nhấn mạnh: hãy cung cấp mã mẫu khi báo lỗi. Báo cáo lỗi không kèm code để tái hiện vấn đề thường khiến việc sửa lỗi trở nên khó khăn và gây thất vọng cho những người duy trì dự án.
Kết luận
SDCC là minh chứng sống động cho sức mạnh của phần mềm mã nguồn mở trong lĩnh vực nhúng. Với sự hậu thuẫn từ NGI0 Commons Fund và Sovereign Tech Fund, dự án đang bước vào giai đoạn phát triển mạnh mẽ chưa từng có — từ hỗ trợ phần cứng cũ kỹ trong thiết bị IoT đến các tính năng bảo mật tiên tiến như mật mã hậu lượng tử. Đối với cộng đồng lập trình nhúng tại Việt Nam, đây là thời điểm tốt để theo dõi và đóng góp cho SDCC, đặc biệt khi các vi điều khiển 8-bit vẫn giữ vai trò quan trọng trong nhiều sản phẩm IoT giá rẻ.

