NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3148 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 13 از 13

موضوع: مشکل توی غیر فعال و فعال کردن وقته در حین اجرای برنامه

  1. #1
    عضو جدید
    تاریخ عضویت
    Sep 2015
    نوشته ها
    10
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض مشکل توی غیر فعال و فعال کردن وقته در حین اجرای برنامه

    با سلام و خسته نباشید.
    دوستان من ی ی قطعه کد دارم که تقریبا هر چیزی رو از توش تونستم درست کنم بجز این مورد.
    میخوام زمانی که وقته EXTI4_IRQHandler اجرا میشه. اولین خط توی این وقفه این وقفه رو غیر فعال کنه. بعد برنامم میاد کلی کار انجام میده. تموم که شد این وقفه فعل بشه دوباره(البته این فعال شدن توی ی تابعی خارج از این تابع باشه.)
    کد هایی که استفاده میکنم ایناست.
    و میکرو هم stm32f103 اینه.
    به نظرتون چطوری از این مشکل جلوگیری کنم.این وقفه مربوط به دریافت وایرلسه. وایرلس که رسید اینو اجرا میکنه. نمیخوام همزمان 2 تا اجرا بشه. چیزی حدود 100 تا نود پیشه همه که همه باید ریپیت کنن. به مشکل برمیخورم.
    خودم از فلگ استفاده کردم جواب نداد. تنها چیزی به ذهنم خورد اینه که کلا اینو غیر فعال کنم.
    ممنون از همکاری شما پیشاپیش.

    کد:
    void EXTI4_IRQHandler(void)     // Hi current occured
    
    {    
     char t=0,b=4,view; 
     if(end){EXTI->PR |= (1<<4);return;}
     if (EXTI->PR & (1<<4))      // EXTI1 interrupt pending?
     {     
      //    while(((GPIOB->IDR & 0x0002) == 0)&&(t<=b)){ t++; }// prn=1;    printf("%d,",t);    prn=3;
      while(((GPIOC->IDR & 0x0010) == 0)&&(t<=b)){ t++; }
      if(t>=b)
      {
       if(tr == 0)
       {
        view=RF_Recieve_Payload(SPI1,recieve_data,32);
    //     prn=1;SendChar(data[0]);SendChar(data[1] );prn=3;
    
        //prn=1;SendChar(view);prn=3;
        if(view == RF_DATA_RECEIVED)
        {                                                           
         if(wifi_main==0)
         {
          //                prn=1;SendChar(0x33);prn=3;
          t_count=0;
          transmit=0;
          view=NPacket_checking();
          //prn=1;SendChar(data[2]);prn=3;
          if(view==1)
          {     
           //if(data[5]==2 && resend_c1==0)resend_counter=2;
           requested=1;
          }
          if(dont_send==1)
          {
           dont_send=0;requested=0;
          }
           }    
        } 
       }
       else 
       if(tr==1)
       {
        view= Check_Sending_Payload();
        if(view== RF_DATA_SEND_ACK_RECEIVED_OK){RX_Mode();}
       }
      }    
      EXTI->PR |= (1<<4);
     }// clear pending interrupt
    }

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    عضو جدید
    تاریخ عضویت
    Sep 2015
    نوشته ها
    10
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    جدی کسی راهی نداره واسه این مشکل!

  4. #3
    کاربر فعال
    تاریخ عضویت
    Dec 2007
    نوشته ها
    113
    تشکر
    92
    تشکر شده 78 بار در 59 پست

    پیش فرض

    سلام
    با این اطلاعات ناقصی که دادین نمیشه درست راهنمایی کرد.
    مثلا یکی از مشکلاتی که میشه حدس زد اینه: شاید متغییر end شما توسط کامپایلر حذف شده باشه.....
    بازهم ببیین اینها شاید بدردتون بخوره:
    کد:
    /** * @brief Deinitializes the EXTI peripheral registers to their default reset values. * @param None * @retval None */ void EXTI_DeInit(void) { EXTI->IMR = 0x00000000; EXTI->EMR = 0x00000000; EXTI->RTSR = 0x00000000; EXTI->FTSR = 0x00000000; EXTI->PR = 0x000FFFFF; }
    کد:
    /** * @brief Initializes the EXTI peripheral according to the specified * parameters in the EXTI_InitStruct. * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure * that contains the configuration information for the EXTI peripheral. * @retval None */ void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct) { uint32_t tmp = 0; /* Check the parameters */ assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode)); assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger)); assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line)); assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd)); tmp = (uint32_t)EXTI_BASE; if (EXTI_InitStruct->EXTI_LineCmd != DISABLE) { /* Clear EXTI line configuration */ EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line; EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line; tmp += EXTI_InitStruct->EXTI_Mode; *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; /* Clear Rising Falling edge configuration */ EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line; EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line; /* Select the trigger for the selected external interrupts */ if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling) { /* Rising Falling edge */ EXTI->RTSR |= EXTI_InitStruct->EXTI_Line; EXTI->FTSR |= EXTI_InitStruct->EXTI_Line; } else { tmp = (uint32_t)EXTI_BASE; tmp += EXTI_InitStruct->EXTI_Trigger; *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; } }
    براتون دو تیکه کد از دستورات cmsis رو گذاشتم.
    تو کد اول از دستور EXTI_DeInit استفاده می کنید
    توی دومی دستور EXTI_Init با پارامتر disable
    فکر کنم غیرفعال کردن وقفه بیشتر از یه دستور باشه...

  5. تشکرها از این نوشته :


  6. #4
    عضو جدید
    تاریخ عضویت
    Sep 2015
    نوشته ها
    10
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    ممنون بابت راهنمایی.
    من کلا مشکلمو شرح میدم ببینید شما چه پیشنهادی واسش دارین.
    من این تابعی که گذاشتم بالا رو برای وفقه وایرلس گذاشتم(یعنی از قبل اینو گذاشتن, من تازه این کدها رو دادن بهم). هر زمانی که ماژول وایرلس فعال میشه, یه پکیج دریافت میکنه این تابع فعال میشه.
    حالا من چیزی حدود 100 تا نود دارم که همه با هم دریافتو انجام میدن و میتونن اونو ریپیت کنن که به ماژول های دورتر هم برسه. الان مشکلی که دارم اینه, وقتی اینا با هم ارسال میکنن و 2 تا وقفه با فاصله‌ی خیلی کمی اجرا میشه, ی سری از متغیرها توی وقفه ی قبلی تغییر میکنه اما خوب وقفه جدید که اجرا میشه همه محاسبات رو بهم میریزه و ماژولم دیگه وفقه نمیگیره تا برقشو قطع و وصل کنم.
    تنها چیزی که به ذهنم رسید ایه که اگه اون وقفه غیر فعال بشه توی خط اول اجرای خودش و زمانی که همه کارهای من تموم شد. دوباره اونو فعال کنم. مشکلم حل بشه.
    اگه چیزایی که نوشتم ناقصه اینو بزارین بابت کم تجربه بودن من توی keil و سخت افزار. کلا یک ماهه دارم کار میکنم این فاز برنامه نویسی رو.
    اما در کل شما واسه این مشکل من چه چیزی رو پیشنهاد میکنین. خودم که دیگه هنگ کردم.
    بازم ممنون بابت راهنمایی های شما.

  7. #5
    کاربر فعال
    تاریخ عضویت
    Dec 2007
    نوشته ها
    113
    تشکر
    92
    تشکر شده 78 بار در 59 پست

    پیش فرض

    سلام
    راستی شما اصلا وقفه رو غیر فعال نمی کنید:
    کد:
    /** * @brief Clears the EXTI's line pending bits. * @param EXTI_Line: specifies the EXTI lines to clear. * This parameter can be any combination of EXTI_Linex where x can be (0..19). * @retval None */ void EXTI_ClearITPendingBit(uint32_t EXTI_Line) { /* Check the parameters */ assert_param(IS_EXTI_LINE(EXTI_Line)); EXTI->PR = EXTI_Line; }
    در خقیقت توی این کدی که شما نوشتین سیستمو آماده دریافت وقفه جدید می کنید.
    پیشنهاد می کنم مثل تابع اولی (deinit)که براتون گذاشتم کل وقفه رو غیرفعال کنید...
    اینجوری که من فهمیدم:
    یه شبکه با 100 نود (گیرنده وایرلس) دارین که به هر کدوم یه میکرو وصله.
    از ماژول وایرلس یه پایه جهت اعلام دریافت پکیج به میکرو وصله.
    این پایه وصل وقفه میکروه.
    ویرایش توسط dostajn : 26-09-2015 در ساعت 13:17

  8. تشکرها از این نوشته :


  9. #6
    عضو جدید
    تاریخ عضویت
    Sep 2015
    نوشته ها
    10
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    در حقیقت اینه و یدونه ماژول به عنوان main دارم که یک پکیج رو میفرسته. این پکیج که با آدرس نود مورد نظر ارسال میشه, زمانی به دست نود میرسه اگه ادرس مربوط به خودش بود که اون روال رو انجام میده اگه نبود اونو ریپیت میکنه. که همین ریپیت شدن مشکل اصلیه منه و تداخل بوجود میاد. الان سوالی که واسم پیش اومکده اینه.
    من توی این ماژول ها چند تا وفقه دارم, این دستور deinit همرو غیر فعال میکنه؟
    EXTI_ClearITPendingBit این تابع ورود عددی بین 0 تا 19 داره واسه غیر فعال کردن یا فعال کردن؟ ورودیش عددهـ؟
    این شیوه ای که در نظر گرفتم که غیر فعال کنه بنظرتون جواب میده؟ یا چیزی دیگه پیشنهاد میکنین بهم؟

  10. #7
    عضو جدید
    تاریخ عضویت
    Sep 2015
    نوشته ها
    10
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    من الان با این تابع EXTI_ClearITPendingBit که تست کردم و عدد 16 رو گذاشتم بع عنوان ورودیش وقفه منو غیر فعال کرد.
    الان اگه بخوام اینو فعال کنم باید از این تابع ایتفاده کنم؟ EXTI_Init که توی پست دوم گذاشتین؟ اگه آره چطوری ازش استفاده کنم. یجوری واسم گنگه.

  11. #8
    کاربر فعال
    تاریخ عضویت
    Dec 2007
    نوشته ها
    113
    تشکر
    92
    تشکر شده 78 بار در 59 پست

    پیش فرض

    نقل قول نوشته اصلی توسط milad7091 نمایش پست ها
    من الان با این تابع EXTI_ClearITPendingBit که تست کردم و عدد 16 رو گذاشتم بع عنوان ورودیش وقفه منو غیر فعال کرد.
    الان اگه بخوام اینو فعال کنم باید از این تابع ایتفاده کنم؟ EXTI_Init که توی پست دوم گذاشتین؟ اگه آره چطوری ازش استفاده کنم. یجوری واسم گنگه.
    غیرفعال نه!!!!
    پاک می کنه...........

  12. تشکرها از این نوشته :


  13. #9
    عضو جدید
    تاریخ عضویت
    Sep 2015
    نوشته ها
    10
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    خوب وقتی پاک بشه, باز میشه اینو دوباره فعال کرد یا همون ساختش؟ چطوری میشه؟

  14. #10
    کاربر فعال
    تاریخ عضویت
    Dec 2007
    نوشته ها
    113
    تشکر
    92
    تشکر شده 78 بار در 59 پست

    پیش فرض

    آهان الان دو زاریم افتاد احتمالا شما یه چیز رو توجه نمی کنید!
    1- وقفه تا زمانی که با روشی مثل تابع DeInit() یا تابع Init و پارامتر Disable فراخوانی نشه، غیر فعال نمی شود.
    2- تا زمانی که بیت وقفه در آدرس رجیستر PR پاک نشه مدام تابع وقفه صدا زده می شود.
    3- شما در واقع یه بار تابع وقفه اجرا میشه اما چون بیت PR مربوطه پاک نمی کردید مدام تابع داره اجرا میشده ...

    دوست عزیز اگه شما وقفه رو غیر فعال کنید برای استفاده دوباره باید از نو وقفه رو پیکره بندی کنید ولی اگر اون بیت PR رو پاک کنید میکرو دوباره آماده دریافت وقفه می شود.
    مثال زیر رو ببین:
    کد:
    /** ***************************************************************************** * @title EXTI_Exp.c * @author CooCox * @date 12 Nov 2013 * @brief This example shows how to configure an external interrupt line. * In this example, the EXTI line 9 is configured to generate an i * nterrupt on each rising or falling edge , we Connect EXTI Line9 * to PC9, When the PC9 is connected to the GND through a wire, EXT * I Line9 interrupt occur. In the interrupt routine, LED PB8 will * blink 3 times. This example has been tested on MCBSTM32, STM32F1 * 03RB device. ******************************************************************************* */ ////// The above comment is automatically generated by CoIDE /////////////////// /** ****************************************************************************** * @file EXTI/EXTI_Exp/main.c * @author MCD Application Team * @version V1.0.0 * @date 30-October-2010 * @brief Main program body ****************************************************************************** * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. * * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2> ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_exti.h" #include "stm32f10x_flash.h" #include "misc.h" #define EXTI9_5_IRQChannel ((u8)0x17) // External Line[9:5] Interrupts #define LED_PORT GPIOB //*************************************************************************** // // Global variables // // ************************************************************************** GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; ErrorStatus HSEStartUpStatus; //*************************************************************************** // // Declare function prototype // // ************************************************************************** void Delay(__IO uint32_t); void RCC_Configuration(void); void GPIO_Configuration(void); void NVIC_Configuration(void); //*************************************************************************** // //This example shows how to configure an external interrupt line. // // ************************************************************************** int main(void) { // // System Clocks Configuration // RCC_Configuration(); // // NVIC configuration // NVIC_Configuration(); // // Configure the GPIO ports // GPIO_Configuration(); // // Connect EXTI Line9 to PC9 // GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9); // // Configure EXTI Line9 to generate an interrupt on rising or falling edge // EXTI_InitStructure.EXTI_Line = EXTI_Line9; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); while (1) { } return 0 ; } //*************************************************************************** // //Configures the different system clocks. // // ************************************************************************** void RCC_Configuration(void) { // // RCC system reset(for debug purpose) // RCC_DeInit(); // // Enable HSE // RCC_HSEConfig(RCC_HSE_ON); // // Wait till HSE is ready // HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus == SUCCESS) { // // HCLK = SYSCLK // RCC_HCLKConfig(RCC_SYSCLK_Div1); // // PCLK2 = HCLK // RCC_PCLK2Config(RCC_HCLK_Div1); // // PCLK1 = HCLK/2 // RCC_PCLK1Config(RCC_HCLK_Div2); // // Flash 2 wait state // FLASH_SetLatency(FLASH_Latency_2); // // Enable Prefetch Buffer // FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // // PLLCLK = 8MHz * 9 = 72 MHz // RCC_PLLConfig(0x00010000, RCC_PLLMul_9); // //Enable PLL // RCC_PLLCmd(ENABLE); // //Wait till PLL is ready // while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } // // Select PLL as system clock source // RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // // Wait till PLL is used as system clock source // while (RCC_GetSYSCLKSource() != 0x08) { } } // // Enable GPIOB, GPIOC and AFIO clock // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE); } //*************************************************************************** // //Configures the different GPIO ports. // //*************************************************************************** void GPIO_Configuration(void) { // // Configure PC9 as input floating (EXTI Line9) // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_Init(GPIOB, &GPIO_InitStructure); } //*************************************************************************** // //Configure the nested vectored interrupt controller. // //*************************************************************************** void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; // // Set the Vector Table base location at 0x08000000 // NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); // // Configure one bit for preemption priority // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); // // Enable the EXTI9_5 Interrupt // NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } //************************************************************************** // //Inserts a delay time. // //************************************************************************** void Delay(__IO uint32_t nCount) { for (; nCount != 0; nCount--); } //************************************************************************** // //This function handles External lines 9 to 5 interrupt request. // //************************************************************************** void EXTI9_5_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line9) != RESET) { Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_8, Bit_SET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_8, Bit_RESET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_8, Bit_SET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_8, Bit_RESET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_8, Bit_SET); Delay(0xFFFFF); GPIO_WriteBit(LED_PORT, GPIO_Pin_8, Bit_RESET); // //Clear the EXTI line 9 pending bit // EXTI_ClearITPendingBit(EXTI_Line9); } }

  15. #11
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    سلام
    اگه شما میخوای وقفه رو موقتی غیر فعال کنی باید بیت مربوط به اون رو در رجیستر imr غیر فعال کنی. مثلا برای غیر فعال کردن exti4 میتونی اینجوری عمل کنی
    exti->imr&=0xffef
    و برای فعال کردن مجدد اون وقفه همون بیت رو دوباره یک میکنی یعنی اینجوری
    exti->imr|=0x0010

  16. تشکرها از این نوشته :


  17. #12
    عضو جدید
    تاریخ عضویت
    Sep 2015
    نوشته ها
    10
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    دوستان ممنون از راهنمایی های شما. کلا اون برنامه کنار گذاشته شده تا اطلاع ثانوی. قراره سخت افزار ها رو تعویض کنیم. اگه مشکل برطرف شد همینجا اطلاع میشد.
    با تشرک از همه

  18. #13
    عضو جدید
    تاریخ عضویت
    Sep 2015
    نوشته ها
    10
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    با تشکر از همه اساتید.
    من راه حلی پیدا کردم واسه این مشکل.
    اومدم کلا توی اینتراپتم فقط یک فلگو فعال کردم. و توی while اونو چک کردمو اگه فعال شده بود این تابع رو اجرا کن. اینجوری تابع کاره خودشو میکنه و هر زمانی که اینتراپت بوجود بیاد باز همون فلگ رو فعال میکنه.
    گفتم اینجا بزرم نتیجه کارم رو.
    ممنون از همه دوستان.

موضوعات مشابه

  1. پینگ نشدن برد توی شبکه وایرلس
    توسط shahin در انجمن سایر موارد مرتبط با میکرو کنترلرها
    پاسخ: 3
    آخرين نوشته: 21-03-2015, 16:12
  2. چرا stm32w108 توی ایران نیست؟
    توسط rozeh در انجمن پیشنهاد واردات قطعات / اضافه کردن محصول به فروشگاه
    پاسخ: 2
    آخرين نوشته: 19-08-2014, 17:53
  3. مشکل توی پایه های یه مالتی پلکستر
    توسط hamedghasemi در انجمن الکترونیک
    پاسخ: 2
    آخرين نوشته: 08-06-2014, 05:12
  4. اتوی پرسی و خرابی اون؟!
    توسط morteza_rk در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 0
    آخرين نوشته: 12-09-2010, 23:52

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •