テクノロード掲示板
ようこそ! ゲスト   [登録]  [ログイン]
返答
 件名:Re:浮動小数点演算.. 2009-12-02 17:10:04 
admin2
参加日時: 2009-08-19 09:20:38
投稿: 80
場所

>データを送ったあと待ち時間が必要なようですが、

>①待ち時間が入らない関数はありますか?

>②待ち時間の計算方法はありますか?

ご指摘の通り、ライブラリv1.0.xには送信完了待機が記述されている関数がありませんので、USB_puts()などで文字を送信後もしくは送信前に、下記の行を追加して頂くことで送信完了まで待機します。

while(count_in!=0);   //送信バッファ空き待ち

 

もしくはcoron_usbprint.c内の文字出力関数を以下のように変更して頂くことで、送信後に待ち時間のwaitを挟む必要がなくなります。

(「Coronお知らせ」フォーラムの方でご連絡させて頂いているライブラリv2.0.4では、送信関数を下記のものに変更しております)

 

/* Global variables ----------------------------------------------------------*/
u32 timeout_cnt=0;

//==============================================================================
// USBCDC 1文字出力
//==============================================================================
void USB_putc(char data){
  if((bDeviceState == CONFIGURED)&&(usbConnectFlag==1)){
   count_in=1;
   UserToPMABufferCopy((u8 *)&data, ENDP1_TXADDR, count_in);
   SetEPTxCount(ENDP1,count_in);
   SetEPTxValid(ENDP1);
   while(count_in!=0){
    timeout_cnt++;
    if(timeout_cnt==10000){count_in=0;}
   }
   timeout_cnt=0;
  }
}

//==============================================================================
// USBCDC 文字列出力
//==============================================================================
void USB_puts(char* buf){
  if((bDeviceState == CONFIGURED)&&(usbConnectFlag==1)){
   count_in=0;
   while(buf[count_in]!='\0'){count_in++;}
   UserToPMABufferCopy((u8 *)buf, ENDP1_TXADDR, count_in);
   SetEPTxCount(ENDP1, count_in);
   SetEPTxValid(ENDP1);
   while(count_in!=0){
    timeout_cnt++;
    if(timeout_cnt==10000){count_in=0;}
   }
   timeout_cnt=0;
  }
}

 //==============================================================================
// USBCDC 指定数文字列出力(文字列、文字数)
//==============================================================================
void USB_putd(char* buf,char len){
  if((bDeviceState == CONFIGURED)&&(usbConnectFlag==1)){
   count_in=len;
   UserToPMABufferCopy((u8 *)buf, ENDP1_TXADDR, count_in);
   SetEPTxCount(ENDP1, count_in);
   SetEPTxValid(ENDP1);
   while(count_in!=0){
    timeout_cnt++;
    if(timeout_cnt==10000){count_in=0;}
   }
   timeout_cnt=0;
  }
}

IP Logged
引用
 件名:浮動小数点演算 & 待ち時間.. 2009-11-28 01:23:08 
morinaga
参加日時: 2009-11-06 06:51:24
投稿: 3
場所

無事動きました。ありがとうございました。

もう一点。

     USB_puts("\r\n\n**** Test ****\r\n\n");
    wait_timer(10000);

のように、データを送ったあと待ち時間が必要なようですが、

 ①待ち時間が入らない関数はありますか?

 ②待ち時間の計算方法はありますか?

よろしくお願いいたします。

IP Logged
引用
 件名:Re:浮動小数点演算.. 2009-11-27 14:53:09 
admin2
参加日時: 2009-08-19 09:20:38
投稿: 80
場所

大変申し訳ございません。

浮動小数点演算を使用する為のライブラリのパスに不備が見つかりました。

 

パスを修正したものを添付致しましたので、一度試して頂けますでしょうか?

 

修正点としては、添付図のように各プロジェクトのプロパティ(※プロジェクト・エクスプローラー内のプロジェクト名のところで右クリック→プロパティ)で、 [Library Search Path]に下記2つを追加することで正常に浮動小数点演算が使えるようになります

("../lib_thumb2"は消してしまって構いません)。

 

"C:\coron\gcc\arm\arm-none-eabi\lib\thumb2"

"C:\coron\gcc\arm\lib\gcc\arm-none-eabi\4.3.3\thumb2"

 

お手数かけますが宜しくお願い致します。



IP Logged
引用
 件名:浮動小数点演算.. 2009-11-27 06:10:32 
morinaga
参加日時: 2009-11-06 06:51:24
投稿: 3
場所

素人質問も申し訳ありません

CORONでフローと演算させたいのですがうまくいきません。ご教授お願いします。

付属の Ex05_AD_GET の main.c を以下のように修正しましたが動きません。

因みに x,y,z の設定、計算部分をコメントアウトすると動きます。

よろしくお願いいたします。 

 

/***********---< TECHNO ROAD.inc >---***********/
/*                                             */
/*          [Coron sample programs]            */
/*               Ex05_AD_GET                   */
/*                                             */
/*   File        :main.c                       */
/*   Version     :v1.0.1                       */
/*   Date        :2009/06/19                   */
/*   Author      :Norio Sakagami               */
/*   Description :Main protocol                */
/*                                             */
/***********************************************/

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"
#include "coron.h"
#include "coron_init.h"
#include "coron_wait.h"
#include "coron_usbcdc.h"
#include "coron_usbprint.h"
#include "coron_ad.h"

#include "usb_lib.h"
#include "usb_prop.h"
#include "usb_desc.h"
#include "usb_pwr.h"

#include <math.h>

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

/* Extern variables ----------------------------------------------------------*/

//=============================
// main関数
//=============================
int main(void){
 
 volatile double x;
 volatile double y;
 volatile double z;
 int  temp;
 
 x = 1.0;
 y = 2.0;
 z = x + y;
 temp = (int)z;
 
 //Coronの初期化(メインクロックの設定,wait関連の設定,LD・SWの設定)
 coron_init();
 
    //USB初期化
    Set_USBClock();
    USB_Interrupts_Config();
    USB_Init();
 
    //ADC初期化
    AD_init();
   
    //LED点灯
    wait_timer(10000); //1sec待機
    LD1_ON;    //LD1を点灯
    wait_timer(10000); //1sec待機
    LD1_OFF;   //LD1を消灯
    LD2_ON;    //LD2を点灯
    wait_timer(10000); //1sec待機
    LD2_OFF;   //LD2を消灯
    LD3_ON;    //LD3を点灯
    wait_timer(10000); //1sec待機
    LD3_OFF;   //LD3を消灯
    
    //USB CDC put strings
    USB_puts("\r\n\n**** Test Program ****\r\n\n");
    wait_timer(10000);
    
    //無限ループ
    while(1){
     if(SW_USER==1){ //SW_USERが押されたら…(押す=1)
         USB_puts("\r\n\n**** Test Program ****\r\n\n");
         LD1_ON;       //LD1を点灯
            USB_putn(ADC1ConvertedValue,5); //IOA0のAD値(12bit)を表示
            USB_putn(temp,5); //IOA0のAD値(12bit)を表示
            wait_timer(100);    //少し間をおく
            USB_puts("\r\n");    //改行
      wait_timer(100);    //少し間をおく
     }
     else{   //SW_USERが押されていなかったら…(押さない=0)
      LD1_OFF;      //LD2を消灯
     }      
    }
  return 0;
}

//======================================================
// End of Program
//======================================================

IP Logged
引用
返答
ページ # 


Powered by ccBoard