色爱av综合网_色女人在线视频_男男gaygays亚洲_日本高清久久一区二区三区

購(gòu)物車0種商品
IC郵購(gòu)網(wǎng)-IC電子元件采購(gòu)商城
最近研究心得
(2011/10/16 9:46:00)
最近研究Directx9.0做的游戲,發(fā)覺(jué)就是標(biāo)準(zhǔn)的前后臺(tái),呵呵。

//-----------------------------------------------------------------------------
//Name:WinMain()
//Desc:Theapplication'sentrypoint
//-----------------------------------------------------------------------------
INTWINAPIWinMain(HINSTANCEhInst,HINSTANCE,LPSTR,INT)
{
//Registerthewindowclass
WNDCLASSEXwc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,
GetModuleHandle(NULL),NULL,NULL,NULL,NULL,
"D3DTutorial",NULL};
RegisterClassEx(&wc);

//Createtheapplication'swindow
HWNDhWnd=CreateWindow("D3DTutorial","D3DTutorial02:Vertices",
WS_OVERLAPPEDWINDOW,100,100,300,300,
GetDesktopWindow(),NULL,wc.hInstance,NULL);

//InitializeDirect3D
if(SUCCEEDED(InitD3D(hWnd)))
{
//Createthevertexbuffer
if(SUCCEEDED(InitVB()))
{
//Showthewindow
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd);

//Enterthemessageloop
MSGmsg;
ZeroMemory(&msg,sizeof(msg));

while(msg.message!=WM_QUIT)//此處循環(huán),包含WINDOW系統(tǒng)使用的消息處理和游戲的主循環(huán)
{
if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
Render();//此處就是游戲的主循環(huán)處,單片機(jī)中的main主循環(huán)
}
}
}

UnregisterClass("D3DTutorial",wc.hInstance);
return0;
}


網(wǎng)友評(píng)論:俺發(fā)覺(jué)相似點(diǎn)真的多。

游戲和前后臺(tái)的原理幾乎一樣。
WINDOW的操作方式,又和嵌入OS一樣,比如播放音樂(lè),還可以打開(kāi)計(jì)算器,各干各的事情。
照樣不感冒嵌入OS,做產(chǎn)品就象做游戲,單一的環(huán)境。

網(wǎng)友評(píng)論:TheGetMessagefunctionretrievesamessagefromthecallingthread'smessagequeue.Thefunctiondispatchesincomingsentmessagesuntilapostedmessageisavailableforretrieval.

UnlikeGetMessage,thePeekMessagefunctiondoesnotwaitforamessagetobepostedbeforereturning.

單核是100%,雙核是50%,四合就會(huì)是25%

Label1->Caption=i++;沒(méi)有必要,因?yàn)槿搜垡约捌聊凰⑿碌乃俣扔邢蓿也怀鲎宑pu,label1也不會(huì)更新。

網(wǎng)友評(píng)論:佩服所長(zhǎng)技術(shù),更佩服所長(zhǎng)把自己經(jīng)驗(yàn)?zāi)贸鰜?lái)分享的精神,頂!!!!!!!

網(wǎng)友評(píng)論:而且更新的飛快,轉(zhuǎn)眼就成百上千了。
俺是為讓W(xué)INDOW一直忙著,沒(méi)別的。

俺猜測(cè):開(kāi)一線程,WINDOW就開(kāi)始使用另外一個(gè)核。
一個(gè)核管主程序,其它管線程。
亂猜。

網(wǎng)友評(píng)論:讓系統(tǒng)可以處理wm_paint事件.
在循環(huán)中加入一個(gè)Sleep(1)---出讓cpu,可以把cpu占用率降下來(lái).

網(wǎng)友評(píng)論:TranslateMessage(&msg);
DispatchMessage(&msg);


網(wǎng)友評(píng)論:真的不錯(cuò)
學(xué)習(xí)中

網(wǎng)友評(píng)論:給你一個(gè)封裝好的class,轉(zhuǎn)到c++builder下很容易


#pragmaonce
#include"Delegate.h"

classCExThread
{
CWinThread*m_pThread;
BOOLm_bThreadAlive;
BOOLm_bStopThread;
staticUINTStart(LPVOIDpParam);

public:
CDelegatem_Delegate;

CExThread(void);
~CExThread(void);

boolRun();
voidStop();
};


#include"stdafx.h"
#include"exthread.h"

CExThread::CExThread(void)
{
m_pThread=NULL;
m_bThreadAlive=FALSE;
m_bStopThread=FALSE;
}

CExThread::~CExThread(void)
{
Stop();
}

boolCExThread::Run()
{
m_pThread=::AfxBeginThread(Start,this);
m_bThreadAlive=TRUE;
returnm_pThread!=NULL;
}


voidCExThread::Stop()
{
if(m_pThread==NULL)return;

do{
m_bStopThread=TRUE;
}
while(m_bThreadAlive);
}


UINTCExThread::Start(LPVOIDpParam)
{
CExThread*me=(CExThread*)pParam;
me->m_bThreadAlive=TRUE;
me->m_Delegate.Invoke(NULL,0);
me->m_bThreadAlive=FALSE;
return0;
}


DELEGATE.H

#if!defined(_Class_Delegate_)
#define_Class_Delegate_
#pragmaonce

/*************************************************************************************************
Warning:UnsafeCode!!!
*************************************************************************************************/

#defineHANDLER(function)reinterpret_cast<PTR_CALLBACK>(function)
#defineSetEventHandler(instance,function)_SetEventHandler((instance),HANDLER(function))

classCDelegate;
typedefvoid(CDelegate::*PTR_CALLBACK)(void*sender,DWORDpara);

classCDelegate
{
PTR_CALLBACKm_pCallBack;
CDelegate*m_pInstance;

public:
CDelegate()
{
m_pCallBack=NULL;
m_pInstance=NULL;
}

void_SetEventHandler(void*pInstance,PTR_CALLBACKpCallBack)
{
m_pInstance=(CDelegate*)pInstance;
m_pCallBack=pCallBack;
}

voidInvoke(void*sender,DWORDpara)
{
if(m_pInstance!=NULL&&m_pCallBack!=NULL)
(m_pInstance->*m_pCallBack)(sender,para);
}
};

#endif

網(wǎng)友評(píng)論:就看你在哪一層,有時(shí)你能控制這個(gè)循環(huán),有時(shí)則不能。

網(wǎng)友評(píng)論:LS的明白了嗎?

網(wǎng)友評(píng)論:用TTIMER做的真的不行,用回調(diào)函數(shù)方式做,發(fā)現(xiàn)TTIMER不是直接調(diào)用,還是通過(guò)消息才去回調(diào)的,20MS誤差太大,1分鐘差個(gè)十幾秒。用多媒體定時(shí)器很準(zhǔn),就是消耗資源大:多媒體定時(shí)器==一個(gè)線程。

沒(méi)辦法,就用多媒體定時(shí)器了。

內(nèi)存管理也搞定,直接先用8M的數(shù)組固定,再內(nèi)部在這個(gè)數(shù)組中分配。

網(wǎng)友評(píng)論:直接替換驅(qū)動(dòng)就可以了。

串口:用PCOMM封裝成隊(duì)列驅(qū)動(dòng)方式,直接替換嵌入裸奔的串口驅(qū)動(dòng)的隊(duì)列驅(qū)動(dòng)
定時(shí)器:系統(tǒng)20MS,弱實(shí)時(shí)處理5MS,用多媒體定時(shí)器搞定。
LCD畫(huà)波形的速度控制,開(kāi)線程查詢精密定時(shí)器(因?yàn)槎嗝襟w定時(shí)器只到MS,速度控制要到0.1ms),這樣可以搞定,相當(dāng)0.1ms的定時(shí)器器。
LCD:用BITMAP,BCB里面可以直接對(duì)內(nèi)存操作,可以按FrameBuffer處理,只要窗口刷新函數(shù)將上下顛倒下處理(BCB中圖形對(duì)FrameBuffer是上下顛倒的)。
NANDFLASH存儲(chǔ),有想法,還有待實(shí)踐。
其它,更簡(jiǎn)單,只要上面幾個(gè)搞定,嵌入裸奔的程序就移植到WINDOW上了。

單片機(jī)程序,寫(xiě)到能移植到WINDOW的程度的份上,俺認(rèn)為應(yīng)該作為一個(gè)設(shè)計(jì)標(biāo)準(zhǔn)考核,高手低手之分。

網(wǎng)友評(píng)論:可以認(rèn)為WINDOW的線程就是中斷,MCU開(kāi)關(guān)中斷,相當(dāng)線程的同步,用臨界方式可以保證低層函數(shù)不重入。

又一心得

網(wǎng)友評(píng)論:然后打開(kāi)機(jī)箱,拔下網(wǎng)卡,把EPROM插到網(wǎng)卡上的ROM插座中,把網(wǎng)卡重新插回主板,然后開(kāi)機(jī)。或者把主板上的BIOS芯片拔下來(lái),把自己的ROM換上。干嘛要啟動(dòng)個(gè)WINDOWS?

網(wǎng)友評(píng)論:感覺(jué)就像一個(gè)倔強(qiáng)的鄉(xiāng)鎮(zhèn)企業(yè)企業(yè)家接管了聯(lián)想。

網(wǎng)友評(píng)論:通過(guò)研究,進(jìn)一步確定基于前后臺(tái)的嵌入裸奔做控制產(chǎn)品比嵌入OS的理論先進(jìn)性,從根子上找到WINDOW這個(gè)大樹(shù)做依靠。
通過(guò)研究,MCU上做的、WINDOW做的,都是一套體系的程序(除驅(qū)動(dòng)不同),便于維護(hù)和管理。
通過(guò)研究,發(fā)現(xiàn)游戲設(shè)計(jì)秘密,改天MMCU混不下去,改行做游戲設(shè)計(jì)混口飯吃。
展望七十歲,準(zhǔn)備設(shè)計(jì)MCU的虛擬機(jī)。


網(wǎng)友評(píng)論:半天時(shí)間。

網(wǎng)友評(píng)論:把石頭當(dāng)寶貝了

網(wǎng)友評(píng)論:估計(jì)你眼里沒(méi)幾個(gè)能成寶貝,高手。


網(wǎng)友評(píng)論:樓主不在MCU的福地里舒坦,跑到WINDOWS這片大鹽堿地來(lái)做甚?玩歸玩,可別亂了陣腳。

網(wǎng)友評(píng)論:無(wú)聊貼

網(wǎng)友評(píng)論:你也完全可以移植到嵌入式os上
何必呢~~~~~~~~~
何苦呢~~~~~~~~~

網(wǎng)友評(píng)論:觀察串口打開(kāi)、關(guān)閉、發(fā)送、接收,可以使用串口偵聽(tīng)軟件,比如:http://www.sudt.com的SerialTrace,這個(gè)不錯(cuò)。

完全按照裸奔方式設(shè)計(jì)的仿MCU的WINDOW程序,以后可能只要會(huì)MCU就可設(shè)計(jì)WINDOW程序,可能......

有關(guān)MCU部分,RainLib_Base.lib,RainLib_Unsiversal.lib,RainLib_Driver.lib被封裝好,按MCU玩WINDOW游戲程序,很簡(jiǎn)單了。

代碼:main.cpp
//---------------------------------------------------------------------------
#include<vcl.h>
#pragmahdrstop

#include"Main.h"

#include"..\WinTools\RainLib_WinTools.h"
#include"..\Base\RainLib_Base.h"
#include"..\Unsiversal\RainLib_Unsiversal.h"
#include"..\Driver\RainLib_Driver.h"

//---------------------------------------------------------------------------
#pragmapackage(smart_init)
#pragmaresource"*.dfm"
TForm1*Form1;
structCommunicateQueue*psCommunicateQueue_Uart8;//串口1

//---------------------------------------------------------------------------
__fastcallTForm1::TForm1(TComponent*Owner)
:TForm(Owner)
{
}
//---------------------------------------------------------------------------

//main.c必須提供
void_stdcallCallBack_5msInterrupt(void)
{
}

//main.c必須提供
void_stdcallCallBack_20msInterrupt(void)
{
}

//---------------------------------------------------------------------------
//窗口初始化
//---------------------------------------------------------------------------
void__fastcallTForm1::MainFormInit(void)
{
this->ClientWidth=Ini_Read("LCD","ScreenWidth",640);
this->ClientHeight=Ini_Read("LCD","ScreenHeight",480);
}

//---------------------------------------------------------------------------
//主初始化
//---------------------------------------------------------------------------
void__fastcallTForm1::MainInit(void)
{
WinToolsLib_Init("RainLib.ini");//INI文件名
this->MainFormInit();

BaseLib_Init(Ini_Read("MSG","BufferMax",5000));//消息隊(duì)列大小
UnsiversalLib_Init(Ini_Read("PACKAGE","PackageMax",2));//使用包解析的任務(wù)數(shù)
DriverLib_Init(this->ClientWidth,this->ClientHeight);

psCommunicateQueue_Uart8=CommunicateQueue_Register(200,200,NULL);
if(Uart8_Setup(1,psCommunicateQueue_Uart8,B38400,BIT_8|STOP_1|P_NONE)==false)
{
Application->MessageBoxA("打開(kāi)串口錯(cuò)誤","程序中斷退出!",MB_OK);
Application->Terminate();
}

//lcd
U8*p=DrvLcd_FramePagePoint(1);
for(inti=0;i<this->ClientHeight*2;i++)
{
for(intj=0;j<this->ClientWidth;j++)
{
*p++=i;
}
}

//開(kāi)始運(yùn)行程序
Msg_RunInit();
this->Show();
}

//---------------------------------------------------------------------------
//析構(gòu)
//---------------------------------------------------------------------------
void__fastcallTForm1::MainDestory(void)
{
DriverLib_Destory();
UnsiversalLib_Destory();
BaseLib_Destory();
WinToolsLib_Destory();
}

//---------------------------------------------------------------------------
//主循環(huán)
//---------------------------------------------------------------------------
void__fastcallTForm1::MainLoop(void)
{
staticboolbTestLcdMove=false;
staticU8mCounter=0;
staticintmy=0;

BaseLib_MainLoop();
UnsiversalLib_MainLoop();
DriverLib_MainLoop();
WinToolsLib_MainLoop();

if(sSysTimer.bSysTouch)
{
if(++mCounter>=2)
{
//20ms*2時(shí)間進(jìn)入
mCounter=0;

if(bTestLcdMove)
{
my--;
if(my==0)
{
bTestLcdMove=false;
}
}
else{
my++;
if(my==(this->ClientHeight-1))
{
bTestLcdMove=true;
}
}

DrvLcd_FrameOffset(my);
DrvLcd_RefreshToForm(this->Canvas,Rect(0,0,this->ClientWidth,this->ClientHeight));

//向串口發(fā)送my位置
CommunicateQueue_Push(psCommunicateQueue_Uart8,(U8)my);
CommunicateQueue_Push(psCommunicateQueue_Uart8,(U8)(my/256));
}
}
}


RainLibMain.cpp:WINDOW調(diào)用
//---------------------------------------------------------------------------

#include<vcl.h>
#include"Main.h"
#pragmahdrstop
//---------------------------------------------------------------------------
USEFORM("Main.cpp",Form1);
//---------------------------------------------------------------------------
WINAPIWinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1),&Form1);
Form1->MainInit();//主初始化

MSGmsg;
ZeroMemory(&msg,sizeof(msg));
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Form1->MainLoop();//主循環(huán)
}
}
Form1->MainDestory();
}
catch(Exception&exception)
{
Application->ShowException(&exception);
}
catch(...)
{
try
{
throwException("");
}
catch(Exception&exception)
{
Application->ShowException(&exception);
}
}
return0;
}
//---------------------------------------------------------------------------


網(wǎng)友評(píng)論:總空間:10240KB
已使用:10610KB
剩余:-370KB



網(wǎng)友評(píng)論:歡迎加入單片機(jī)交流群13883121
讓我們?cè)诮涣髦谐砷L(zhǎng)吧`````````長(zhǎng)期聘請(qǐng)高手


網(wǎng)友評(píng)論:實(shí)時(shí)內(nèi)核自己作,其他的功能調(diào)用windows的。
個(gè)人感覺(jué)所長(zhǎng)這種做法不可取。
呵呵

網(wǎng)友評(píng)論:建議所長(zhǎng)看看候杰的《深入淺出MFC》,李維的《INSIDEVCL》。
多線程的建議候杰的翻譯的一本,名字記不清楚了。
肯定有收獲。
所言不妥之處,敬請(qǐng)諒解

網(wǎng)友評(píng)論:還深入淺出,俺都深入深出。什么人都有,比如LS的,連俺在做什么都沒(méi)搞明白亂發(fā)言。



網(wǎng)友評(píng)論:所長(zhǎng)要干嗎?

要做說(shuō)相聲里的最好的縣長(zhǎng)?
還是要做縣長(zhǎng)里的最好的說(shuō)相聲的?

網(wǎng)友評(píng)論:研究太拔高了吧?

網(wǎng)友評(píng)論:MCU、WINDOW設(shè)計(jì),可以做到極其相似地步,俺要證明這一點(diǎn)。


網(wǎng)友評(píng)論:嵌入裸奔比嵌入OS更適合移植:嵌入OS移植到WINDOW上,可能性太小了。

網(wǎng)友評(píng)論:我也可以提供一些思路,供大家參考。正好這段時(shí)間有空。

網(wǎng)友評(píng)論:有什么意義?

網(wǎng)友評(píng)論:真有時(shí)間啊!

網(wǎng)友評(píng)論:下列是利用WINDOW資源實(shí)現(xiàn)MCU功能:
串口pcomm實(shí)現(xiàn)MCU的串口功能
線程實(shí)現(xiàn)MCU精密定時(shí)器、中斷
窗口實(shí)現(xiàn)LCD顯示
BITMAP實(shí)現(xiàn)LCD的FrameBuffer驅(qū)動(dòng)方式
多媒體定時(shí)器實(shí)現(xiàn)低等級(jí)定時(shí)器中斷
RTCRTC

其它就是MCU功能,包括程序框架,在WINDOW上運(yùn)行:
裸奔GUI
消息管理
庫(kù)函數(shù)
串口功能
裸奔數(shù)據(jù)庫(kù)(數(shù)據(jù)管理)
NANDFLASH存儲(chǔ)
EEPROM存儲(chǔ)


以后可以增加IO功能,使用并口。大家測(cè)試按鍵或做什么簡(jiǎn)單控制,直接用。
可以請(qǐng)圈圈做個(gè)USB模擬功能,接AD、DC什么的。

俺的口號(hào):做到會(huì)MCU,就會(huì)WINDOW的控制產(chǎn)品設(shè)計(jì)。


網(wǎng)友評(píng)論:用USB口擴(kuò)展出一個(gè)總線或者幾個(gè)IO不難。軟核跑在PC上,外面有幾個(gè)IO,那不就是有點(diǎn)象硬件仿真器嘛,不同的地方在于CPU是軟的...

網(wǎng)友評(píng)論:很值得一試。
主要是現(xiàn)在有裸奔程序要移植到WINDOW,所以在干這種大家認(rèn)為不值得干的事情,呵呵。
通過(guò)這件不值得,不劃算的移植,可以驗(yàn)證嵌入裸奔架構(gòu)的科學(xué)性和完整性,同時(shí)也發(fā)現(xiàn)一些缺陷。



網(wǎng)友評(píng)論:現(xiàn)在看不懂,占個(gè)位置先。希望有一天能讀懂。

網(wǎng)友評(píng)論:支持所長(zhǎng)裸奔,

我也想移植裸奔的GUI到windows上,

所長(zhǎng)有啥好的思路么?



網(wǎng)友評(píng)論:原來(lái)做個(gè)兩份,一個(gè)在mega128上跑480*234的TFT顯示,一個(gè)是S3C2410上跑800*600,1024*768,兩者結(jié)構(gòu)相同,細(xì)節(jié)不同,俺要整理一下。

網(wǎng)友評(píng)論:建立通用的處理程序在那兒能找到啊

網(wǎng)友評(píng)論:就是看不太動(dòng)

瀏覽:(762)| 評(píng)論( 0 )
博文評(píng)論

  • 昵 稱:
  • 內(nèi) 容:10~250個(gè)字符
  • 驗(yàn)證碼: 驗(yàn)證碼看不清楚?請(qǐng)點(diǎn)擊刷新驗(yàn)證碼
  •                      
  • 博文分類

    熱點(diǎn)博文

    最新博文

    最新評(píng)論

    IC電子元件查詢
    IC郵購(gòu)網(wǎng)電子元件品質(zhì)保障

    主站蜘蛛池模板: 象州县| 收藏| 丹江口市| 色达县| 井冈山市| 永定县| 安龙县| 二手房| 塔河县| 页游| 高青县| 韶山市| 潼南县| 扶沟县| 英超| 丁青县| 承德市| 会宁县| 永和县| 龙陵县| 望奎县| 吉水县| 阿荣旗| 德江县| 三门峡市| 胶州市| 新泰市| 田东县| 涞水县| 新化县| 子长县| 大同县| 江都市| 东丰县| 平潭县| 曲靖市| 阳朔县| 崇明县| 福贡县| 惠州市| 梨树县|