Tôi chưa viết mã C++ trong một thời gian dài; Tuy nhiên bây giờ tôi phải làm việc trên một công cụ texas F28335 DSP và tôi đang cố gắng để di chuyển từ C đến C + +. Tôi có đoạn mã sau đó là cố gắng để khởi tạo một dịch vụ thường xuyên ngắt với một phương pháp tĩnh của một lớp:C++ chuyển con trỏ tới phương thức tĩnh
//type definition for the interrupt service routine
typedef interrupt void (*PINT)(void);
//EPWMManager.h
class EPWMManager
{
public:
EPWMManager();
static interrupt void Epwm1InterruptHandler(void);
};
//EPWMManager.cpp
interrupt void EPWMManager::Epwm1InterruptHandler(void)
{
//some code to be called on interruption
}
//main.cpp
int main(void)
{
PINT p;
p = &(EPWMManager::Epwm1InterruptHandler);
return 0;
}
Khi biên soạn tôi nhận được như sau:
error: a value of type "void (*)()" cannot be assigned to an entity of type "PINT"
Tôi đoán tôi là thiếu một số diễn viên.
Từ khóa 'gián đoạn 'không phải là một phần của C++. Nó phải là một phần mở rộng cụ thể cho việc triển khai của bạn. Điều gì sẽ xảy ra nếu bạn xóa nó khỏi các định nghĩa của cả hai 'PINT' và' Epwm1InterruptHandler'? Bạn vẫn gặp lỗi? –
Chất lượng trải nghiệm của tôi về trình biên dịch TI dành cho bộ vi xử lý DSP không ấn tượng ngay cả đối với C (ví dụ: chúng tôi đã phát hành nhiều lần trong các lỗi của trình tạo mã trên các trường hợp xử lý trang). Bạn có chắc rằng việc chuyển sang ngôn ngữ phức tạp hơn như C++ là một ý tưởng hay không? – 6502
nếu tôi có 'ngắt' ra các lỗi là ra ... Tuy nhiên tôi không chắc chắn về những tác động nó có. Tôi đã nghĩ rằng việc chuyển sang C++ sẽ là một ý tưởng tốt để có mọi thứ có cấu trúc hơn (các lớp, đối tượng, các mẫu thiết kế, vv) vì mã C của chúng ta bắt đầu trông rất lộn xộn. – TropE