اطلاعیه

Collapse
No announcement yet.

نحوه تبدیل floating point به string همراه با FPU

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

    نحوه تبدیل floating point به string همراه با FPU

    با سلام
    دوستان من کد ساده ای رو برای تبدیل floating point به string نوشتم . اما مشکلی که هست اینه که این کد در صورت غیر فعال بودن واحد FPU درست کار میکند. اگر واحد FPU فعال شود ، این کد دیگه درست کار نمیکند. ممنون میشم راهنمایی کنید.
    کامپایلر مورد استفاده : KEIL
    میکروکنترلر : STM32F407VGT6
    کد:
    #include <stm32f4xx.h>
    #include "stm32f4xx_conf.h"
    #include <stdio.h>
    
    void Delay(__IO uint32_t nCount);
    
    GPIO_InitTypeDef GPIO_InitStruct;
    USART_InitTypeDef USART_InitStruct;
    
    
    char txt2[11];
    char txt1[17]="error was ocurred";
    uint16_t d=0x0000;
    unsigned int size;
    float moiseture=1111.655;
    
    
    int main(void)
    {
    
     /* Periph clock enable */
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
     
      /////////
      GPIO_PinAFConfig( GPIOA , GPIO_PinSource2 , GPIO_AF_USART2 );
      GPIO_PinAFConfig( GPIOA , GPIO_PinSource3 , GPIO_AF_USART2 );
      ////////
      GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
      GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
      GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
     GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
     GPIO_Init(GPIOA, &GPIO_InitStruct);
      //////
      USART_InitStruct.USART_BaudRate = 9600 ;
      USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None ;
      USART_InitStruct.USART_Mode = USART_Mode_Tx |USART_Mode_Rx ;
      USART_InitStruct.USART_Parity = USART_Parity_No ;
      USART_InitStruct.USART_StopBits = USART_StopBits_1 ;
      USART_InitStruct.USART_WordLength = USART_WordLength_8b ;
      
      USART_Init( USART2 , &USART_InitStruct);
      //////
      USART_Cmd( USART2 , ENABLE );
      //////
      
     while (1)
     {
          
          size=snprintf( txt2,11, "%4.4f\n", moiseture);
          for( d=0;d<size;d++){
                USART_SendData( USART2 , txt2[d]);
                while (!(USART2->SR & USART_SR_TC));
          }
          Delay(0x6FFFFF);
     }
    }
    
    void Delay(__IO uint32_t nCount)
    {
     while(nCount--)
     {
     }
    }
    
    void HardFault_Handler(void)
    {
     /* Go to infinite loop when Hard Fault exception occurs */
     for( d=0;d<17;d++){
                USART_SendData( USART2 , txt1[d]);
                while (!(USART2->SR & USART_SR_TC));
          }
        while(1);
    }
    هر وقت خواستید کاری بکنید، چهل سال عقب و چهل سال جلو را در نظر بگیرید. "بابابزرگ"

    #2
    پاسخ : نحوه تبدیل floating point به string همراه با FPU

    سلام
    برنامه ای که نوشتی مشکل داره
    این قسمتش
    کد:
    size=snprintf( txt2,11, "%4.4f\n", moiseture);
    شما ی 11 نوشتی که اون اضافیه و باید حذف بشه
    در ضمن یکم آرای txt2 رو بزرگتر بگیر که یوقت عددت بزرگتر شد مشکل ساز نشه (حافظه که داری به مقدار کافی)
    زندگی یعنی امید و حرکت
    کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
    سؤالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
    برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
    به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

    دیدگاه


      #3
      پاسخ : نحوه تبدیل floating point به string همراه با FPU

      با سلام
      ممنون از پاسخ شما
      اما ظاهرا به دلیل کوچک بودن متن به اسم تابع دقت کافی نداشتید. snprintf
      The snprintf functions found in the C99 version of <stdio.h> are safe versions of the sprintf functions that prevent buffer overrun. In the statement:

      snprintf(buffer, size, "Error %d: Cannot open file '%s'", errno, filename);
      the variable size specifies the maximum number of characters that can be inserted into buffer. The buffer can never be overrun, provided its size is always greater than the size specified by size.

      هر وقت خواستید کاری بکنید، چهل سال عقب و چهل سال جلو را در نظر بگیرید. "بابابزرگ"

      دیدگاه


        #4
        پاسخ : نحوه تبدیل floating point به string همراه با FPU

        نوشته اصلی توسط abolfazlk873
        با سلام
        ممنون از پاسخ شما
        اما ظاهرا به دلیل کوچک بودن متن به اسم تابع دقت کافی نداشتید. snprintf
        The snprintf functions found in the C99 version of <stdio.h> are safe versions of the sprintf functions that prevent buffer overrun. In the statement:

        snprintf(buffer, size, "Error %d: Cannot open file '%s'", errno, filename);
        the variable size specifies the maximum number of characters that can be inserted into buffer. The buffer can never be overrun, provided its size is always greater than the size specified by size.

        سلامپبله حق با شما بود اصلا به اسمش توجه نکرده بودم :sad:
        از ftoa هم میتونی استفاده کنی
        زندگی یعنی امید و حرکت
        کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
        سؤالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
        برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
        به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

        دیدگاه

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