⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 norflash的文件系统。 用于中低端手机开发的参考
💻 C
字号:

#include "windows.h"
#include "fsmdefs.h"
#include "stdio.h"
#include "fsmapi.h"

volatile BOOL MainThreadExit;

/* Add for Calling Simulator */
extern	int MainInit();
extern 	int StartWorking();	
extern	int QuitFromSystem();

uint32	FsmSystemInit(void * start, uint32 size);
uint32  FsmSystemExit(void);


DWORD WINAPI ThreadProcHighest(LPVOID lpParameter);

DWORD WINAPI ThreadProcHigh(LPVOID lpParameter);

DWORD WINAPI ThreadProcNormal(LPVOID lpParameter);

DWORD WINAPI ThreadProcLow(LPVOID lpParameter);

DWORD WINAPI ThreadProcLowest(LPVOID lpParameter);


HANDLE	hThreadHighest;
HANDLE	hThreadHigh;
HANDLE	hThreadNormal;
HANDLE	hThreadLow;
HANDLE	hThreadLowest;

volatile uint8	FsmStarting = FALSE;

int main()
{
	DWORD	status;
/*
	HANDLE	hThreadHighest;
	HANDLE	hThreadHigh;
	HANDLE	hThreadNormal;
	HANDLE	hThreadLow;
	HANDLE	hThreadLowest;*/

	HANDLE	hThread[5];

	DWORD	threadId = 0;

	printf("\npress any key to exit");

//	MainInit();

	status = FsmSystemInit(0, 0);

	if(status != 0)
	{
		printf("\nfailre on init : %x", status);
		return 1;
	}

//	StartWorking();	

//	QuitFromSystem();

#if 0
	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);

	MainThreadExit = FALSE;

/*	hThreadLowest = CreateThread(NULL, 
								 0, 
								 ThreadProcLowest, 
								 NULL, 
								 CREATE_SUSPENDED, 
								 &threadId
								 );

	hThreadLow = CreateThread(NULL, 
							  0, 
							  ThreadProcLow, 
							  NULL, 
							  CREATE_SUSPENDED, 
							  &threadId
							  );

	hThreadNormal = CreateThread(NULL, 
								 0, 
								 ThreadProcNormal, 
								 NULL, 
								 CREATE_SUSPENDED, 
								 &threadId
								 );
*/
	hThreadHigh = CreateThread( NULL, 
								0, 
								ThreadProcHigh, 
								NULL, 
								CREATE_SUSPENDED, 
								&threadId
								);
/*
	hThreadHighest = CreateThread(NULL, 
								  0, 
								  ThreadProcHighest, 
								  NULL, 
								  CREATE_SUSPENDED, 
								  &threadId
								  );

*/

	SetThreadPriority(hThreadHighest, THREAD_PRIORITY_HIGHEST);

	SetThreadPriority(hThreadHigh, THREAD_PRIORITY_ABOVE_NORMAL);

	SetThreadPriority(hThreadNormal, /*THREAD_PRIORITY_NORMAL*/THREAD_PRIORITY_ABOVE_NORMAL);

	SetThreadPriority(hThreadLow, /*THREAD_PRIORITY_BELOW_NORMAL*/THREAD_PRIORITY_HIGHEST);

	SetThreadPriority(hThreadLowest, THREAD_PRIORITY_LOWEST);




	ResumeThread(hThreadLowest);

	Sleep(20);

	ResumeThread(hThreadLow);

	Sleep(20);

	ResumeThread(hThreadNormal);

	Sleep(20);

	ResumeThread(hThreadHigh);

	Sleep(20);

	ResumeThread(hThreadHighest);


	hThread[0] = hThreadLowest;
	hThread[1] = hThreadLow;
	hThread[2] = hThreadNormal;
	hThread[3] = hThreadHigh;
	hThread[4] = hThreadHighest;


	getchar();
#endif
	MainThreadExit = TRUE;

	printf("\nWait for all thread terminate!");

	WaitForMultipleObjects(5, hThread, TRUE, INFINITE);

	printf("\nExit from main()");

	FsmSystemExit();

	return 0;
}

DWORD WINAPI ThreadProcHighest(LPVOID lpParameter)
{
	DWORD		status;
	DWORD		fd;
	int			i;
	BYTE		testdata[128];

	printf("\nEnter Thread Highest");

	fd = FsmOpen("testv\\window\\testfile2", FSM_CREATE_NEW | FSM_OPEN_WRITE | FSM_OPEN_READ);

	if(fd == INVALID_FILE_HANDLE)
	{
		printf("\n Create file \\window\\testfile2 failure!");

		return 1;
	}

	for(i = 0; i < 128; i++)
	{
		testdata[i] = i;
	}

	for(i = 0; i < 512; i++)
	{
		if(MainThreadExit)
		{
			printf("\nMain Thread exit!");
			break;
		}

		status = FsmWrite(fd, testdata, 128);

		if(status != 128)
		{
			printf("\nWrite file \\window\\testfile2 failure, have written %d bytes to it!", 26 * i);

			FsmClose(fd);

			return 1;
		}
		Sleep(30);
	}

	FsmClose(fd);

	printf("\n%x bytes have been written to \\window\\testfile2!", i * 128);

	printf("\nExit Thread Highest");

	return 0;
}

DWORD WINAPI ThreadProcHigh(LPVOID lpParameter)
{
	HENUM		hEnum;
	FsmFileInfoT	FileInfo;
	HANDLE			hThread[4];

	hThread[0] = hThreadLowest;
	hThread[1] = hThreadLow;
	hThread[2] = hThreadNormal;
	hThread[3] = hThreadHighest;

	printf("\nEnter Thread High");


//	WaitForMultipleObjects(4, hThread, TRUE, INFINITE);

	printf("\n all thread except high-thread have exited");

	hEnum = FsmFindFirstFile("testv\\*", &FileInfo);

	if(hEnum == NULL)
	{
		printf("\nFindFirst failed");
		return 1;
	}

	printf("\n %s,\t\t\t Len = %d Bytes", FileInfo.FileName, FileInfo.FileLength);

	while(FsmFindNextFile(hEnum, &FileInfo) != ERR_NOTEXIST)
	{
		printf("\n %s,\t\t\t Len = %d Bytes", FileInfo.FileName, FileInfo.FileLength);

		if(MainThreadExit)
		{
			printf("\nMain Thread exit!");

			break;
		}

	}

	FsmFindClose(hEnum);

	printf("\nExit Thread High");

	return 0;
}

DWORD WINAPI ThreadProcNormal(LPVOID lpParameter)
{
	DWORD		status;
	DWORD		fd;
	int			i;
	BYTE		testdata[128];

	printf("\nEnter Thread Normal");

	status = FsmMakeDir("testv\\window");

	if(status != 0)
	{
		printf("\nMake directory \\window failure!");
	;	return 1;
	}

	if(MainThreadExit)
	{
		printf("\nMain Thread exit!");
		return 1;
	}

	status = FsmMakeDir("testv\\window\\test");

	if(status != 0)
	{
		printf("\nMake directory \\window\\test failure!");
	;	return 1;
	}

	if(MainThreadExit)
	{
		printf("\nMain Thread exit!");
		return 1;
	}

	status = FsmMakeDir("testv\\testdir");

	if(status != 0)
	{
		printf("\nMake directory \\testdir failure!");
	;	return 1;
	}

	if(MainThreadExit)
	{
		printf("\nMain Thread exit!");
		return 1;
	}

	fd = FsmOpen("testv\\testdir\\testfile", FSM_CREATE_NEW | FSM_OPEN_WRITE | FSM_OPEN_READ);

	if(fd == INVALID_FILE_HANDLE)
	{
		printf("\n Create file \\testdir\\testfile failure!");

		return 1;
	}

	for(i = 0; i < 26; i++)
	{
		testdata[i] = 'A' + i;
	}

	for(i = 0; i < 1024; i++)
	{
		if(MainThreadExit)
		{
			printf("\nMain Thread exit!");
			break;
		}

		status = FsmWrite(fd, testdata, 26);

		if(status != 26)
		{
			printf("\nWrite file \\testdir\\testfile failure, have written %d bytes to it!", 26 * i);

			FsmClose(fd);

			return 1;
		}
		Sleep(30);
	}

	FsmClose(fd);

	printf("\n%x bytes have been written to \\testdir\\testfile!", i * 26);

	printf("\nExit Thread Normal");

	return 0;
}

DWORD WINAPI ThreadProcLow(LPVOID lpParameter)
{
	DWORD		status;
	DWORD		fd;
	int			i = 0;
	BYTE		testdata[2048];

	printf("\nEnter Thread Low");

	fd = FsmOpen("testv\\testfile", FSM_OPEN_EXISTING | FSM_OPEN_WRITE | FSM_OPEN_READ);

	if(fd == INVALID_FILE_HANDLE)
	{
		printf("\n Create file \\testfile failure!");

		return 1;
	}

	status = FsmSeek(fd, 0, FSM_FILE_END);

	if(status != 0)
	{
		printf("\n Seek failure");
		FsmClose(fd);

		return 1;
	}

	printf("\n Seek end");
	status = FsmWrite(fd, testdata, 600);

	if(status != 600)
	{
		printf("\nWrite failure %d", status);
	}

	FsmClose(fd);

	return 0;
/*
	status = FsmTruncate(fd, 2048);

	if(status != 0)
	{
		printf("\n truncate failure!");
	}

	FsmClose(fd);
*/
/*
	fd = FsmOpen("testv\\testfile", FSM_CREATE_NEW | FSM_OPEN_WRITE | FSM_OPEN_READ);

	if(fd == INVALID_FILE_HANDLE)
	{
		printf("\n Create file \\testfile failure!");

		return 1;
	}

	for(i = 0; i < 26; i++)
	{
		testdata[i] = 'a' + i;
	}

	for(i = 0; i < 32; i++)
	{
		if(MainThreadExit)
		{
			printf("\nMain Thread exit!");
			break;
		}

		status = FsmWrite(fd, testdata, 1024);

		if(status != 1024)
		{
			printf("\nWrite file \\testfile failure, have written %d bytes to it!", 26 * i);

			FsmClose(fd);

			return 1;
		}
		Sleep(30);
	}

	FsmClose(fd);

	printf("\n%x bytes have been written to \\testfile!", i * 26);
*/
	printf("\nExit Thread Low");

	return 0;
}

DWORD WINAPI ThreadProcLowest(LPVOID lpParameter)
{
	DWORD		status;
	DWORD		fd;
	int			i;
	BYTE		testdata[128];

	printf("\nEnter Thread Lowest");

	fd = FsmOpen("testv\\window\\test\\testfile2", FSM_CREATE_NEW | FSM_OPEN_WRITE | FSM_OPEN_READ);

	if(fd == INVALID_FILE_HANDLE)
	{
		printf("\n Create file \\window\\test\\testfile2 failure!");

		return 1;
	}

	for(i = 0; i < 10; i++)
	{
		testdata[i] = '0' + i;
	}

	for(i = 0; i < 1024; i++)
	{
		if(MainThreadExit)
		{
			printf("\nMain Thread exit!");
			break;
		}

		status = FsmWrite(fd, testdata, 10);

		if(status != 10)
		{
			printf("\nWrite file \\window\\test\\testfile2 failure, have written %d bytes to it!", 26 * i);

			FsmClose(fd);

			return 1;
		}
		Sleep(30);
	}

	FsmClose(fd);

	printf("\n%x bytes have been written to \\window\\test\\testfile2!", i * 26);

	printf("\nExit Thread Lowest");

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -