اطلاعیه

Collapse
No announcement yet.

++C در Keil

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ++C در Keil

    سلام من میخوام در Keil به زبان C++ برنامه بنویسم اما وقتی فایل برنامه رو c++ میکنم دیگه اینتراپت تایمر کار نمیکنه!!
    برنامه رو برای LPC1768 نوشتم وقتی فایل رو main.c میذارم کار میکنه ولی وقتی main.cpp میذارم دیگه کار نمیکنه
    اگه کسی کار کرده من رو راهنمایی کنه
    کد:
    #include "LPC17xx.h"
    
    int main (void) 
    {
    	LPC_SC->PCONP |= 1 << 1;   // Power up Timer 0
    	LPC_SC->PCLKSEL0 |= 1 << 2;  // Clock for timer = CCLK
    	LPC_TIM0->MR0 = 1 << 23;   // Suitable for LED
    	LPC_TIM0->MCR |= 1 << 0;   // Interrupt on Match0 compare
    	LPC_TIM0->MCR |= 1 << 1;   // Reset timer on Match 0.
    	LPC_TIM0->TCR |= 1 << 1;   // Reset Timer0			
    	LPC_TIM0->TCR &= ~(1 << 1);  // stop resetting the timer.
    	NVIC_EnableIRQ(TIMER0_IRQn); // Enable timer interrupt
    	LPC_TIM0->TCR |= 1 << 0;   // Start timer
    
    	LPC_GPIO2->FIODIR |= 1 << 5; // LED is connected to P1.29
    	while(1)
    	{
    		//do nothing
    	}
     
    }
    void TIMER0_IRQHandler (void)
    {
      if((LPC_TIM0->IR & 0x01) == 0x01) 	// if MR0 interrupt
      {
        LPC_TIM0->IR |= 1 << 0; 	// Clear MR0 interrupt flag
        LPC_GPIO2->FIOPIN ^= 1 << 5; 	// Toggle the LED
      }
    }

    #2
    پاسخ : ++C در Keil

    بعضی وقت ها با استفاده از کلاس ها و اشیاء می تونید کدهای بسیار خوانا و توسعه پذیر بنویسید. ریاضیات ماتریسی، اعداد مختلط، پردازش تصویر و امثال اینها توسط C++ ساده تر نوشته می شوند.

    اگر می خواید از موهبت های C++ در uVision استفاده کنید باید حتماً تابع main را در یک فایلِ cpp. قرار بدید.
    نکته مهم اینه که توابع وقفه باید در فایل مجزا و با پسوند c. نوشته شده و به پروژه اضافه بشه.
    با رعایت کردن همین دو نکته می توانید یک پروژه کامل با محلوطی از فایل های C و C++ داشته باشید.
    بیایید با Google آشتی کنیم!

    دیدگاه


      #3
      پاسخ : ++C در Keil

      ممنون از توجهتون
      یک راه حل هم پیدا کردم که توابع اینتراپت رو درست میکنه باید تابع اینتراپت رو داخل یک extern c بنویسیم مانند کد زیر
      کد:
      extern "C" {
      void RIT_IRQHandler(void)    //Repetitive Interrupt Timer Interrupt service function
      {
      	  
      	if (SysTick->CTRL & 0x10000) timer_tick ();
      	LPC_RIT->RICTRL |= 1;      // Clear Repetitive Interrupt Timer interrupt flag 
      
      }
      
      }

      دیدگاه


        #4
        پاسخ : ++C در Keil

        سلام.

        کلا نکته اش اینه که توابع C رو برای اینکه بتونید در C++ استفاده کنید باید بین بلوک extern c قرار بدید. به همین سادگی ...
        It is what it is
        آموزش های ویدئویی به سبک MBED
        پروژه EasyMCU :: تا ارائه چیزی نمانده!

        دیدگاه

        لطفا صبر کنید...
        X