نقل قول نوشته شده توسط md3848 مشاهده تاپیک
آره دیگه - گفتم قبلا که - عضو کلاس چه public و چه private که باشن مقدار دهی نمیشن و باید حتما در اول فایل usb.cpp تعریفشون کنم.
این کدا برا راه اندازی پورت usb هستش - میکرو به pc وصل میشه و یه سری اطلاعات اولیه رد و بدل میشه که باعث رخ دادن وقفه میشه - که تو اون وقفه هه این متغییری که صحبتشو میکنیم - مشکل داره و مقدار دهی نمیشه.
نقل قول نوشته شده توسط md3848 مشاهده تاپیک
سلام - کلاس من ( داخل فایل usb.h ) به صورت زیر هستش :
class USB {
public :
void isr();
private :
volatile uint8_t CCEMPTY_status = 1;
} static usb;


در فایل usb.cpp، تو تابع وقفه، اومدم یه تابع از کلاس فوق رو فراخوندم :
extern "C" {
void USB_IRQHandler() {
usb.isr();
}
}


داخل تابع isr از متغیر CCEMPTY_status استفاده کردم ولی تغییرات داخل این متغییر ثبت نمیشه ولی وقتی تعریف متغییر CCEMPTY_status رو، اول فایل usb.cpp قرار میدم مشکل حل میشه - چرا؟

کد زیر داخل کلاس به صورت private باشه یا اول فایل usb.cpp باشه - چه فرقی داره - چرا باید تو یکیش تغییرات تو متغییر ثبت نشه؟
volatile uint8_t CCEMPTY_status = 1;
نقل قول نوشته شده توسط md3848 مشاهده تاپیک
این کدی که دارم میزنم برا میکرو کنترلر هستش، کدهام به صورت زیر هستش :


تو فایل main از کتابخونه usbSerial استفاده کردم؛
تو کتابخونه usbSerial از کتابخونه usb استفاده کردم.
تو کتابخونه cdc_class_request و standard_request هم نیاز دارم که از کتابخونه usb استفاده کنم.
لذا چون 3 جا نیاز دارم که از کلاس usb با یک شیء استفاده کنم، اومدم شیء رو به صورت static تعریف کردم.


خدمت شما : http://s9.picofile.com/file/8347540384/usb_lib.rar.html


سلام
متغیر استاتیک در هر compilation unit (فایل cpp) ، از دیگری جدا به حساب میاد.
یعنی شما سه تا متغییر مختلف "usb" داری. باید از extern استفاده کرد.مثالش هم لینک دادم:
https://stackoverflow.com/questions/...pilation-units