Tôi đang làm việc cho một dự án cao cấp cho trường đại học của mình và tôi đã gặp phải một trở ngại lớn trong việc cố gắng làm cho mã của tôi hoạt động.Làm thế nào bạn có thể thực hiện C++ khi trình biên dịch nhúng của bạn không hỗ trợ toán tử mới hoặc STL?
Trình biên dịch mà chúng tôi có cho vi điều khiển Atmel 8 bit của chúng tôi không hỗ trợ toán tử mới hoặc xóa và không hỗ trợ C++ STL. Tôi có thể lập trình nó trong C, nhưng tôi phải thực hiện một thuật toán A * mà tôi chưa bao giờ làm trước đây. Trong khi tôi đã thử C ban đầu, tôi sớm nhận ra rằng tôi chưa bao giờ làm C thuần khiết trước đây. Việc cố gắng mô hình hóa các đối tượng với các cấu trúc và các hàm đang làm chậm tôi xuống vì tôi đã quen với cú pháp C++ sạch hơn nhiều.
Bất kể, từ ngữ chính xác cho các trình biên dịch những thiếu sót của tôi có thể được tìm thấy ở đây: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus
Để vượt qua chúng và vẫn sử dụng C++ Tôi đã xem xét các khả năng sau đây. 1) Không phân bổ bất cứ điều gì, chỉ cần sử dụng mẫu để tạo mảng cố định trên ngăn xếp. 2) Phân bổ và tìm một số hack để gọi hàm tạo cho các đối tượng khi tôi đã phân bổ không gian cho chúng. Vị trí mới không phải là một tùy chọn vì mới không phải là toán tử. 3) Chỉ cần sử dụng C và hút nó lên, một vi điều khiển của nó tại sao tôi nhận được ưa thích? 4) Tìm trình biên dịch tốt hơn có thể sẽ có giá $$$.
Tùy chọn thứ hai là khó nhất nhưng nó sẽ có khoản thanh toán lớn nhất theo cách tôi có thể viết mã này. Tuy nhiên, tôi tưởng tượng rằng gỡ lỗi nó có thể là một nỗi đau lớn nếu tôi làm sai. Tôi đang nghĩ đến việc tạo các đối tượng trên stack, sao chép bit của chúng vào không gian được phân bổ, và sau đó zeroing các bit trong đối tượng để nó không gọi hàm hủy của nó. Để làm điều đó tôi sẽ truy cập các bit trực tiếp với một con trỏ char unsigned và toán tử sizeof để lấy số byte.
Điều đó nghe có vẻ khủng khiếp và tôi không biết nếu nó có thể hoạt động đáng tin cậy, nhưng tôi đang xem xét nó. Tôi biết vtables có thể là một vấn đề nhưng tôi không có ý định về việc có bất kỳ vtables vì nó chỉ là một vi điều khiển 8 bit.
Nếu tôi nhớ chính xác 8 bit Atmels không có đủ ram để nghĩ về bộ nhớ động a'la malloc/new. – lothar
Nếu tôi có thể quá tải các toán tử đó thì tôi có thể kiểm soát bộ nhớ đến từ đâu. Nó có thể được trên đống hoặc ngăn xếp. –
Tôi phát hiện ra rằng tôi chỉ có 1KB để chơi với, mà về cơ bản loại trừ A * như một công cụ tìm đường dẫn khả thi cho robot của tôi. Tôi hiện đang sử dụng một DFS đơn giản cho đến khi tôi có thể nhận được một với nhiều RAM hơn. –