Tôi biên dịch cho LPC1114, một ARM nhỏ (thực sự là Cortex) đích. RAM bị hạn chế nhiều hơn ROM. Tôi sử dụng trình biên dịch GCC (CodeBenchLite) mới nhất của Mentor (GCC 4.6.3). Tôi có một số đối tượng liên tục mà tôi muốn có trong ROM. Theo như tôi hiểu các đối tượng ffx trong mã dưới đây nên kết thúc trong ROM (mã), nhưng thay vào đó nó được đặt trong DATA.Làm cách nào để GCC đặt một C++ constexpr trong ROM?
class flop {
public:
int x;
constexpr flop(int x) : x(x){}
};
extern constexpr flop ffx(1);
Làm cách nào để thuyết phục trình biên dịch tính toán đối tượng và đặt nó trong ROM?
hoặc có lẽ tôi nên hỏi:
- tôi làm cách nào mong đợi G ++ để tạo ra dữ liệu ROMable cho FFX
- nếu như vậy, là mã của tôi chính xác cho này
- nếu như vậy, mà G ++ phiên bản này được hỗ trợ (tôi sử dụng 4.6, có lẽ tôi cần 4.7?)
============================= ==========
Mục nhập lỗi này c++/49673 dường như chỉ ra rằng tôi là một vấn đề đã biết, có thể được khắc phục trong GCC 4.7. Thật không may tôi thích sử dụng Mentor/CodeSourcery được xây dựng, vẫn còn ở 4.6.3. Vì vậy, tôi đoán trong thời gian này tôi đang mắc kẹt với lỗi này. :(
Tôi không biết kiến trúc, nhưng dường như không phải là một oxymoron để cố gắng * ghi * vào * bộ nhớ chỉ đọc *? –
@JohnDibling: có vẻ như nó, nhưng bạn đã sai. Các bộ vi xử lý nhỏ thường có cách để flash chương trình của bạn sang ROM. –
Không có gì mà tiêu chuẩn C++ sẽ cung cấp cho bạn. Tuy nhiên, bạn có thể thử * phân tán tải * như mô tả ở đây: [Định vị mã và dữ liệu trong bộ nhớ (Scatterloading)] (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc. faqs/ka3558.html). HTH! – dirkgently