program

仮想COMソフト

PC内部で仮想のCOMポートを作ることができるソフトウェア。
フリーウェアでおすすめは、これ
同類ソフトであるVirtualComPort2(検索ではこれが一番上の方にくる)は、残念ながらフリーでは5分しか動作しない。

VC++で純粋なC言語に近いプロジェクトにするには

  1. WIN32のコンソールアプリのプロジェクトで作成する
  2. 作成するとint _tmain(・・・)になっているので、これをint main()に修正する
  3. 次にメニュのプロジェクト->hogeのプロパティを選択する
  4. 構成プロパティ->C/C++->プリコンパイル済みヘッダーを選択する
  5. プリコンパイル済みヘッダを使用しないを選択する
  6. プリコンパイル済みヘッダーファイル「stdafx.h」と書かれているので消す
  7. 適用をクリック
  8. プログラム画面に戻り、#include <stdafx.h>の行を削除
  9. コンパイルが通ればOK

C言語の乱数

txに乱数の範囲を指定すると、その範囲の乱数が返る。
#include <stdlib.h>
double rnd(double tx)
{
  return tx*rand()/(RAND_MAX+1.0);         /* Function of rnd               */
}

同階層のファイルリストを取得する

for /f "delims=;" %%i in ('dir /b .\*.dat') do (call :exec1 "%%i" )

BATプログラムについて

よさそうなサイト
参考1
参考2

コマンドプロンプト(BATファイル)

同階層のフォルダを調べ、フォルダの中に特定のexeをコピーする
@REM 全フォルダにおいてeqk2tsfを実行
@REM 1階層まで
@REM --------------------------------------------------------------------
echo off
for /d %%a in (.\*) do (call :hoge "%%a")
for /d %%a in (.\*) do (call :cddo "%%a")
goto end

:hoge
echo %~1

@REM コピー
@REM --------------------------------------------------------------------
copy .\eqk2tsf.exe %~1
exit /b

@REM 移動して実行
@REM --------------------------------------------------------------------
:cddo
cd %~1
eqk2tsf.exe
del eqk2tsf.exe
cd ../
exit /b

@REM --------------------------------------------------------------------
:end
pause

コマンドプロントでテキストファイルの結合

連番のファイルを一度に結合することができる。便利。
copy a:\s603000\a086.* newfile.txt

電子負荷(KIKUSUI PLZ4W)制御ソフトウェア

KIKUSUIの電子負荷の制御ソフトウェアを自作したので、アップ。RS232のクロスケーブルで接続し使用します。
シーケンス的にコマンド送信が可能です。コマンドについては製品マニュアル参照。
ソフトウェア
マニュアル

スペアナ(ADVANTEST U3751)データ取得ソフトウェア

U3751のデータ取得ソフトを自作したのでアップ。公式ページにも結構なソフトウェアが公開されているが、時系列でデータを保存するソフトウェアがなかったので自作した。
ソフトウェア

ApacheとPHPの組み合わせ環境を使う場合

Apache/PHP/MySQLなどをWindowsに一発でインストールできる「VertrigoServ」を導入すると良い。

コマンドプロンプトでのエイリアスの設定

doskey ls = dir

コマンドプロンプト起動時にbatを実行する

%windir%\system32\cmd.exe /k C:\Users\hoge\bashrc.bat

コマンドプロンプトでポート使用状態を見る

netstat -an

コマンドプロンプトでネットの経路を見る

tracert www.yahoo.co.jp

ipconfigをスタートメニューのから実行する場合

以下のように入力すれば良い
cmd /k ipconfig

ワーカースレッドの負荷軽減

スレッド内にSleep()処理を入れ込むと良い。
Sleep処理中は、処理が占有されなくなるので、CPU使用率が軽減される。

ライセンス期限付きプログラム

バイナリの中に書き込まれている場合は、srtlingで開きバイナリを置換することで、どうにかなる場合もある。
LSBファーストでかかれていることもあるので注意

コマンドプロンプトでネットワークドライブアクセス

  1. Myコンピュータ内で、ネットワークドライブに割り当てます
  2. 例えば、ネットワークドライブ z:に割り当てたとします
  3. cd /d z:

BELL7030用試験ソフトウェア

磁力計BELL 7030用の自作ソフトウェア。使い方とか作っておいてなんだけど、忘れました。
RS-232Cで、PCと接続し、使用します。
iniファイルで、通信速度とか変更できます。
BELL7030用試験ソフトウェア

コマンドプロンプトからフォルダを開く

CUI上でカレントフォルダを開きたい場合は、下記コマンドで開くことができる
explorer ./

コマンドプロンプト

pingでコンピュータ名を取得するには、下記のようにする
ping -a 127.0.0.1

Windows7以降で、右クリックメニューの「送る」に項目を追加するには

下記にショートカットを追加する。「hoge」はユーザー名を入れること。
C:\Users\hoge\AppData\Roaming\Microsoft\Windows\SendTo

正規表現を用いて文字列を1Byte区切りにする@テキストエディタ

置換前:([A-Z\d])([A-Z\d])
置換後:$1$2,

mapファイルの生成

リンカのオプションで以下を指定する
-Map=output.map

C言語

  • 構造体にポインタを指定することで、代入無しに値を更新する
通常は、構造体を宣言し、適当な変数に記録しておきたい値を代入するが、ここでは予め記録したい変数のポインタを構造体に記録しておくことで、代入なしに値を更新することができる。下記のサンプルでは、構造体への代入なしで値が更新されていることが分かる。

#include<stdio.h>

// ポインタ指定の構造体
typedef struct OA_test {
	unsigned char	**test1;
	int	*test2;
	int	*test3;
} OA_test;

// main関数
int
main()
{
	int i;
	unsigned char	*j;
		OA_test test={(unsigned char **)&j,(int *)&i,0};
	
	*j=0;
	
	for(i=0;i<10;i++)
	{
		*j+=2;
		printf("now %d\t%d\n",**test.test1,*test.test2);
	}
	
	return	0;
}

  • C言語のARGVの使い方
#include <stdio.h>

#define _MAXREAD    80

int main(int argc, char* argv[])
{
	FILE *fp;    			/* (1)ファイルポインタの宣言 */
	unsigned char data[1000];  	/* 読み込みデータ格納用   */
	size_t size;       		/* 読み込めたデータサイズ */

	// テレメ用変数
	char	chr[4];
	char 	args[7][_MAXREAD];
	float	px[39];
	float	py[39];
	unsigned long	intensity[39];
	unsigned short	amount[39];
	unsigned short	index[39];
	int i,j;

	if(argc != 2){
		printf("解析するファイルをドラッグ&ドロップしてください\n");
		getchar();

		return -1;
	}
	// ファイルパスの取得
   	for(i=0 ; i<argc ; i++ ){
       	if(argv[i] != NULL)
           	strncpy(args[i],argv[i],_MAXREAD);
   	}

   	if ((fp = fopen(args[1], "rb")) == NULL) {
       	printf("file open error!!\n");
       	exit(-1);    /* (3)エラーの場合は通常、異常終了する */
   	}
   	j = 0;

   	size = fread( data, 1, 640, fp );  /* 5000バイト分読み込む */
   	for(i=0; i<size; i+=16)  /* 実際に読み込めた分だけ繰り返す */
   	{
	chr[3]	=	data[i+0];
		chr[2]	=	data[i+1];
		chr[1]	=	data[i+2];
		chr[0]	=	data[i+3];
       	px[j] 	= 	*(float *)(chr);

		chr[3]	=	data[i+4];
		chr[2]	=	data[i+5];
		chr[1]	=	data[i+6];
		chr[0]	=	data[i+7];	
       	py[j] 	= 	*(float *)(chr);
       	intensity[j]	= (unsigned long) ((data[i+ 8] << 24) | (data[i+ 9] << 16) | (data[i+10] << 8) | data[i+11]);
        	amount[j]    	= (unsigned short)((data[i+12] <<  8) | (data[i+13]));
        	index[j]    	= (unsigned short)((data[i+14] <<  8) | (data[i+15]));

        	j++;
    	}

   	printf("#No,\tpx,\tpy,\tintensity,\tamount,\tindex\n");
  	for(i=0;i<39;i++)
       	printf("%02d,\t%e,\t%e,\t%lu,\t%d,\t%d\n",i+1,px[i],py[i],intensity[i],amount[i],index[i]);

   	printf("\n%d,%s",argc,args[1]);
   	getchar();

	fclose(fp);    /* (5)ファイルのクローズ */
 
	return 0;
}
最終更新:2016年11月25日 10:23