A. vita3k配置要求
vita3k配置要求如下:
操作系統:Linux、MacOS和Windows(僅支持64位系統、且需要安裝VC運行庫2015-2019)。
CPU:支持AVX指令集的64位處理器。
GPU:支持OpenGL4.1/4.3及以上版本、且支持帶著色器互鎖的顯卡。
運行內存:至少需要4GB(其實2GB也能運行)。
B. stm32並口驅動12864,求大神看看我的程序錯在哪了編譯通過但是屏幕上沒顯示~搞了兩天了,頭疼死我了、
我有51的程序,可供參考。
#include "lcd12864.h"
#include "ziku.h"
#include <string.h>
static void delay(uint j) //延時
{
uchar i;
for(; j!=0; j--)
for(i=0; i<100; i++);
}
void busy(void)
{
uchar i;
for(i=0;i<50;i++)
_nop_();
}
void wdata(uchar wdata)
{
busy(); //忙提示
LCD_RW=0;
LCD_DI=1;
P0=wdata;
LCD_EN=0;
LCD_EN=1;
LCD_EN=0;
}
void wcode(uchar wcode)
{
busy();
LCD_RW=0;
LCD_DI=0;
P0=wcode;
LCD_EN=0;
LCD_EN=1;
LCD_EN=0;
}
void subinit()
{
delay(10);
wcode(0xc0);//設置顯示初始行
}
//設置顯示位置
void setxy(uchar x,uchar y)
{
if ((y>=0)&(y<=63))
{
LCD_CSA=0;
LCD_CSB=1;
}
else //if (y<=127)
{
LCD_CSA=1;
LCD_CSB=0;
}
wcode(0x40|(y%64));
wcode(0xb8|x);
P0=0xff;
}
void wdram(uchar x,uchar y,uchar dd)
{
setxy(x,y);
wdata(dd);
P0=0xff;
LCD_CSA=1;
LCD_CSB=1;
}
//復位.
void Lcd_RST(void)
{
//rst=0;
LCD_REST=0;
delay(50);
LCD_REST=1;
Lcd_Clear(0,7,0,128);
wcode(0x3f);//開顯示
}
//LCD初始化
void Lcd_Init(void)
{
LCD_POR=0;
Lcd_RST();
LCD_CSA=0;
LCD_CSB=1;
wcode(0x3e);subinit();
LCD_CSA=1;
LCD_CSB=0;
wcode(0x3e);subinit();
Lcd_Clear(0,7,0,128);
LCD_CSA=0;
LCD_CSB=1;
wcode(0x3f);//開顯示
LCD_CSA=1;
LCD_CSB=0;
wcode(0x3f);//開顯示
}
void Lcd_On(void)
{
LCD_CSA=0;
LCD_CSB=1;
wcode(0x3f);//開顯示
LCD_CSA=1;
LCD_CSB=0;
wcode(0x3f);//開顯示
}
//LCD清顯示屏
void Lcd_Clear(uchar StartLine,uchar StopLine,uchar StartRow,uchar StopRow)
{
uchar x,y;
for(x=StartLine; x<StopLine+1; x++)
{
for(y=StartRow; y<StopRow; y++)
{
wdram(x,y,0);
}
}
}
//顯示一個漢字
void Lcd_DispOneChar(uchar x,uchar y,uchar * hz,uchar disp_mode,uchar Width)
{
uchar i;
for(i=0; i<Width; i++)
{
if(disp_mode==WHITE)
{
wdram(x,y+i,*(hz+i));
wdram(x+1,y+i,*(hz+Width+i));
}
else
{
wdram(x,y+i,0xff-*(hz+i));
wdram(x+1,y+i,0xff-*(hz+Width+i));
}
}
if(Width==12)
{
for(i=12; i<14; i++)
{
if(disp_mode==WHITE)
{
wdram(x,y+i,0);
wdram(x+1,y+i,0);
}
else
{
wdram(x,y+i,0xff);
wdram(x+1,y+i,0xff);
}
}
for(i=1; i<4; i++)
{
if(disp_mode==WHITE)
{
wdram(x,y-i,0);
wdram(x+1,y-i,0);
}
else
{
wdram(x,y-i,0xff);
wdram(x+1,y-i,0xff);
}
}
}
}
void Lcd_Disp_String(uchar x,uchar y,char *pString,uchar disp_mode)
{
uchar i,j;
uchar LineDispCode[16];
//strlen(),為字元串長度測量。
memset(LineDispCode,0,16); //清零數組
strcpy(LineDispCode,pString); //字元串之間的相互復制。
for(i=0; i<strlen(pString); i++)
{
LineDispCode[i]=*(pString+i);
}
i=0;
while(LineDispCode[i]!=0)
{
if(LineDispCode[i]>=0xA0)
{
//顯示的是漢字
for(j=0; j<ZIMO_NUM; j++)
{
if(GB_12[j].Index[0]==LineDispCode[i] &&
GB_12[j].Index[1]==LineDispCode[i+1])
{
//顯示的是漢字
Lcd_DispOneChar(x,y,GB_12[j].Msk,disp_mode,12);
y+=16;
break;
}
}
i+=2;
}
else
{
//顯示的是ASCII編碼
for(j=0; j<ASC_NUM; j++)
{
if(ASC_12[j].Index==LineDispCode[i])
{
//顯示的是漢字
Lcd_DispOneChar(x,y,ASC_12[j].Msk,disp_mode,8);
y+=8;
break;
}
}
i++;
}
if(i>=16)
{
break;
}
}
}
//顯示數字.
void Lcd_Disp_OneNum(uchar x,uchar y,uchar num,uchar disp_mode)
{
switch(num)
{
case 0:{Lcd_Disp_String(x,y,"0",disp_mode);}break;
case 1:{Lcd_Disp_String(x,y,"1",disp_mode);}break;
case 2:{Lcd_Disp_String(x,y,"2",disp_mode);}break;
case 3:{Lcd_Disp_String(x,y,"3",disp_mode);}break;
case 4:{Lcd_Disp_String(x,y,"4",disp_mode);}break;
case 5:{Lcd_Disp_String(x,y,"5",disp_mode);}break;
case 6:{Lcd_Disp_String(x,y,"6",disp_mode);}break;
case 7:{Lcd_Disp_String(x,y,"7",disp_mode);}break;
case 8:{Lcd_Disp_String(x,y,"8",disp_mode);}break;
case 9:{Lcd_Disp_String(x,y,"9",disp_mode);}break;
default: break;
}
}
//顯示二位數。
void Disp_2num(uchar x,uchar y,uchar num,uchar disp_mode)
{
uchar ch[2];
ch[0]=num%10;
ch[1]=num/10;
Lcd_Disp_OneNum(x,y,ch[1],disp_mode);
Lcd_Disp_OneNum(x,y+8,ch[0],disp_mode);
}
//*****************************************************
//顯示三位數。
void Disp_3num(uchar x,uchar y,uint num,uchar disp_mode)
{
uchar ch[2];
ch[0]=num/100;
ch[1]=num%100;
if(ch[0])
Lcd_Disp_OneNum(x,y, ch[0],disp_mode);
else
Lcd_Disp_String(x,y," ",disp_mode);
Disp_2num(x,y+8, ch[1],disp_mode);
}
//*****************************************************
//顯示四位數。
void Disp_4num(uchar x,uchar y,uint num,uchar disp_mode)
{
uchar ch[4],tmp;
tmp=num/100;
ch[0]=tmp/10;
ch[1]=tmp%10;
tmp=num%100;
ch[2]=tmp/10;
ch[3]=tmp%10;
Lcd_Disp_OneNum(x,y,ch[0],disp_mode);
Lcd_Disp_OneNum(x,y+8,ch[1],disp_mode);
Lcd_Disp_OneNum(x,y+16,ch[2],disp_mode);
Lcd_Disp_OneNum(x,y+24,ch[3],disp_mode);
}
void Lcd_DispIco2(uchar x,uchar y,uchar *pIco)//顯示老肯圖標
{
uchar i,j;
for(i=0; i<4; i++)
{
for(j=0; j<32; j++)
{
wdram(x+i,y+j,*pIco);
pIco++;
}
}
}
//*****************************************************
//顯示多位數。 disp_mode&0x10==1時,進行即每位都顯示,否則大於0的位置不顯示。
void Disp_NumGB16(uchar x,uchar y,ulong Data,uchar num,uchar disp_mode)
{
uchar idata ch=0,i,tmp;
for(i=0;i<num;i++)
{
tmp=Data%10;
Data/=10;
if((disp_mode&0x10)||tmp>0||Data>0||num<=2)
Lcd_Disp_OneNum(x,y+(num-i-1)*8,tmp,disp_mode%10);
else
Lcd_Disp_String(x,y+(num-i-1)*8," ",disp_mode%10);
}
}
C. vc 6.0的編譯優化在哪設置
工程->設置->c/c++
打開上面的你就能看到了
D. pragma message輸出在哪
Message 參數能夠在編譯信息輸出窗口中輸出相應的信息,這對於源代碼信息的控制是非常重要的。其使用方法為: #pragma message(消息文本)當編譯器遇到這條指令時就在編譯輸出窗口中將消息文本列印出來。
當我們在程序中定義了許多宏來控制源代碼版本的時候,我們自己有可能都會忘記有沒有正確的設置這些宏,此時我們可以用這條指令在編譯的時候就進行檢查。假設我們希望判斷自己有沒有在源代碼的什麼地方定義了_X86這個宏可以用下面的方法 #ifdef _X86#pragma message(_X86 macro activated!)#endif當我們定義了_X86這個宏以後,應用程序在編譯時就會在編譯輸出窗口裡顯示「_X86 macro activated! 」。我們就不會因為不記得自己定義的一些特定的宏而抓耳撓腮了。 (比較常用)
只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次,這條指令實際上在VC6中就已經有了,但是考慮到兼容性並沒有太多的使用它。
#pragma once是編譯相關,就是說這個編譯系統上能用,但在其他編譯系統不一定可以,也就是說移植性差,不過現在基本上已經是每個編譯器都有這個定義了。
#ifndef,#define,#endif這個是C++語言相關,這是C++語言中的宏定義,通過宏定義避免文件多次編譯。所以在所有支持C++語言的編譯器上都是有效的,如果寫的程序要跨平台,最好使用這種方式 #pragma hdrstop表示預編譯頭文件到此為止,後面的頭文件不進行預編譯。BCB可以預編譯頭文件以加快鏈接的速度,但如果所有頭文件都進行預編譯又可能占太多磁碟空間,所以使用這個選項排除一些頭文件。
有時單元之間有依賴關系,比如單元A依賴單元B,所以單元B要先於單元A編譯。你可以用#pragma startup指定編譯優先順序,如果使用了#pragma package(smart_init) ,BCB就會根據優先順序的大小先後編譯。 #pragma comment(...)該指令將一個注釋記錄放入一個對象文件或可執行文件中。
常用的lib關鍵字,可以幫我們連入一個庫文件。
每個編譯程序可以用#pragma指令激活或終止該編譯程序支持的一些編譯功能。例如,對循環優化功能: #pragma loop_opt(on)//激活#pragma loop_opt(off)//終止有時,程序中會有些函數會使編譯器發出你熟知而想忽略的警告,如「Parameter xxx is never used in function xxx」,可以這樣: #pragma warn—100//#100intinsert_record(REC*r){/*functionbody*/}#pragma warn+100//#100backon函數會產生一條有唯一特徵碼100的警告信息,如此可暫時終止該警告。
每個編譯器對#pragma的實現不同,在一個編譯器中有效在別的編譯器中幾乎無效。可從編譯器的文檔中查看。 #pragma pack(n)和#pragm apop()struct sample{char a;double b;};當sample結構沒有加#pragma pack(n)的時候,sample按最大的成員那個對齊;
(所謂的對齊是指對齊數為n時,對每個成員進行對齊,既如果成員a的大小小於n則將a擴大到n個大小;
如果a的大小大於n則使用a的大小;)所以上面那個結構的大小為16位元組.
當sample結構加#pragma pack(1)的時候,sizeof(sample)=9位元組;無空位元組。
(另註:當n大於sample結構的最大成員的大小時,n取最大成員的大小。
所以當n越大時,結構的速度越快,大小越大;反之則)
#pragma pop()就是取消#pragma pack(n)的意思了,也就是說接下來的結構不用#pragma pack(n) #pragma comment(comment-type,[commentstring])comment-type是一個預定義的標識符,指定注釋的類型,應該是compiler,exestr,lib,linker之一。
comment string是一個提供為comment-type提供附加信息的字元串。
注釋類型:
1、compiler:
放置編譯器的版本或者名字到一個對象文件,該選項是被linker忽略的。
2、exestr:
在以後的版本將被取消。
3、lib:
放置一個庫搜索記錄到對象文件中,這個類型應該是和comment string(指定你要Linker搜索的lib的名稱和路徑)這個庫的名字放在Object文件的默認庫搜索記錄的後面,linker搜索這個這個庫就像你在命令行輸入這個命令一樣。你可以在一個源文件中設置多個庫記錄,它們在object文件中的順序和在源文件中的順序一樣。如果默認庫和附加庫的次序是需要區別的,使用Z編譯開關是防止默認庫放到object模塊。
4、linker:
指定一個連接選項,這樣就不用在命令行輸入或者在開發環境中設置了。
只有下面的linker選項能被傳給Linker. /DEFAULTLIB,/EXPORT,/INCLUDE,/MANIFESTDEPENDENCY,/MERGE,/SECTION(1) /DEFAULTLIB:library
/DEFAULTLIB 選項將一個 library 添加到 LINK 在解析引用時搜索的庫列表。用 /DEFAULTLIB指定的庫在命令行上指定的庫之後和 .obj 文件中指定的默認庫之前被搜索。忽略所有默認庫 (/NODEFAULTLIB) 選項重寫 /DEFAULTLIB:library。如果在兩者中指定了相同的 library 名稱,忽略庫 (/NODEFAULTLIB:library) 選項將重寫 /DEFAULTLIB:library。
(2)/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]
使用該選項,可以從程序導出函數,以便其他程序可以調用該函數。也可以導出數據。通常在 DLL 中定義導出。entryname是調用程序要使用的函數或數據項的名稱。ordinal 在導出表中指定范圍在 1 至 65,535 的索引;如果沒有指定 ordinal,則 LINK 將分配一個。NONAME關鍵字只將函數導出為序號,沒有 entryname。
DATA 關鍵字指定導出項為數據項。客戶程序中的數據項必須用 extern __declspec(dllimport)來聲明。
有三種導出定義的方法,按照建議的使用順序依次為:
源代碼中的 __declspec(dllexport).def 文件中的 EXPORTS 語句LINK 命令中的 /EXPORT 規范所有這三種方法可以用在同一個程序中。LINK 在生成包含導出的程序時還創建導入庫,除非生成中使用了 .exp 文件。
LINK 使用標識符的修飾形式。編譯器在創建 .obj 文件時修飾標識符。如果 entryname以其未修飾的形式指定給鏈接器(與其在源代碼中一樣),則 LINK 將試圖匹配該名稱。如果無法找到唯一的匹配名稱,則 LINK 發出錯誤信息。當需要將標識符指定給鏈接器時,請使用 Dumpbin 工具獲取該標識符的修飾名形式。
(3)/INCLUDE:symbol
/INCLUDE 選項通知鏈接器將指定的符號添加到符號表。
若要指定多個符號,請在符號名稱之間鍵入逗號 (,)、分號 (;) 或空格。在命令行上,對每個符號指定一次 /INCLUDE:symbol。
鏈接器通過將包含符號定義的對象添加到程序來解析 symbol。該功能對於添包含不會鏈接到程序的庫對象非常有用。用該選項指定符號將通過 /OPT:REF 重寫該符號的移除。
我們經常用到的是#pragma comment(lib,*.lib)這類的。#pragma comment(lib,Ws2_32.lib)表示鏈接Ws2_32.lib這個庫。 和在工程設置里寫上鏈入Ws2_32.lib的效果一樣,不過這種方法寫的 程序別人在使用你的代碼的時候就不用再設置工程settings了 介紹
用#pragma data_seg建立一個新的數據段並定義共享數據,其具體格式為: #pragma data_seg(shareddata)HWNDsharedwnd=NULL;//共享數據#pragma data_seg()-----------------------------------------------------------------
1,#pragma data_seg()一般用於DLL中。也就是說,在DLL中定義一個共享的有名字的數據段。最關鍵的是:這個數據段中的全局變數可以被多個進程共享,否則多個進程之間無法共享DLL中的全局變數。
2,共享數據必須初始化,否則微軟編譯器會把沒有初始化的數據放到.BSS段中,從而導致多個進程之間的共享行為失敗。例如, #pragma data_seg(MyData)intg_Value;//.#pragma data_seg()//DLL提供兩個介面函數:int GetValue(){ return g_Value;}void SetValue(int n){ g_Value=n;}然後啟動兩個進程A和B,A和B都調用了這個DLL,假如A調用了SetValue(5); B接著調用int m = GetValue(); 那麼m的值不一定是5,而是一個未定義的值。因為DLL中的全局數據對於每一個調用它的進程而言,是私有的,不能共享的。假如你對g_Value進行了初始化,那麼g_Value就一定會被放進MyData段中。換句話說,如果A調用了SetValue(5); B接著調用int m = GetValue(); 那麼m的值就一定是5,這就實現了跨進程之間的數據通信。 #pragma region是Visual C++中特有的預處理指令。它可以讓你折疊特定的代碼塊,從而使界面更加清潔,便於編輯其他代碼。折疊後的代碼塊不會影響編譯。你也可以隨時展開代碼塊以進行編輯等操作。
格式: #pragma region name#pragma endregion comment使用示例如下: #pragma region VariablesHWND hWnd;const size_t Max_Length = 20;//other variables#pragma endregion This region contains global variables.如上邊所示,需要折疊的代碼必須包含在#pragma region和#pragma endregion之間。#pragma region和#pragma endregion之後可以添加一些用來注釋的文字。當你折疊代碼塊後,這些文字會顯示在折疊的位置。
折疊代碼塊的方法:如同Visual C++中折疊函數、類、命名空間,當代碼被包含在如上所述的指令之間後,#pragma region這一行的左邊會出現一個「-」號,單擊以折疊內容,同時「-」號會變成「+」號,再次單擊可以展開代碼塊。
此預編譯指令在Visual Studio 2005及以上版本可以使用。但是在Visual Studio 2005中,當#pragma region之後包含類似「1st」這類的文字,會導致「error C2059: syntax error : 'bad suffix on number'」的編譯錯誤。避免使用數字或者將數字與字母分離可以解決這個問題。
E. c語言編譯程序的時候,檢查告訴我錯了,但沒告訴我錯在哪裡,在哪裡設置檢查錯誤的時候能夠告訴我錯在哪
vc6.0→一般直接左擊兩下【下方的那行錯誤提示信息】,就可以看到藍色標志;
如果不行就這樣做:
左鍵點擊一下【下方的那行錯誤提示信息】,再右鍵一下,彈出一個小窗口,看到
【「轉到錯誤....」】,滑鼠箭頭移動到那裡,左鍵點擊它一下,可以在你寫的程序中
看到錯誤代碼行的最左邊有一個藍色指示標志
F. java虛擬機已經安裝,但不知道在哪兒編譯和運行程序。
1.配置環境變數
裝了JDK後,javac等java命令只能在bin目錄下運行。配置環境變數可以使在系統任務目錄都能使用這些命令。
JAVA中常用需要設置的三個環境變數:
JAVA_HOME 、CLASSPATH、PATH
(1)配置環境變數
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_15
(2).用%JAVA_HOME%就可以取代C:\Program Files\Java\jdk1.6.0_15這一部分
CLASSPATH
.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/activation.jar:$JAVA_HOME/lib/mail.jar
或
CLASSPATH
.\;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
(3).PATH
;%JAVA_HOME%\bin
其實windows下,只需要配置:
PATH=C:\Program Files\Java\jdk1.6.0_15\bin;.XXXXXXX;就能滿足我們的要求了。不過建議配置完整
2.測試
打開cmd,輸入命令:javac 或者命令:java -version
如果屏顯命令提示或者版本信息,就證明安裝且配置正確
3.運行JAVA程序
在C盤下建一個.java文件:HelloWorld.java,寫你的第一個JAVA程序吧。。。
寫完後保存,然後在cmd目錄下:
c:\ javac HelloWorld.java
c:\ java HelloWorld
輸出你列印的信息的話,OK,你成功了!
要點,HelloWorld.java文件中的類名必須為:HelloWorld
G. vita3k模擬器3.6固件裝載不了游戲
安裝PUP完整包,不要只安裝128兆一般系統固件。
同時也需要安裝字體固件,在Vita3K的配置設置GUI界面勾選支持亞區字體選項才能正常顯示的文字,使用我精簡後的系統固件壓縮包,解壓覆蓋到指定位置,也需要勾選支持亞區字體選項才能顯示正常文字。
進入游戲還是有很多的bug,畫面上會有一些顯示不出來的地方,此外在切換畫面的時候還會閃,閃的很厲害,光敏性癲癇警告。
H. ps vita project怎麼用
ps vita project使用方法:
管理員模式運行Vita3K.exe,如果提示缺少vcruntime140_1.dll,要安裝vc2015運行庫,或直接在網上下載此文件復制到WindowsSystem32目錄下。
到網上找一個固件下載,下載後是PUP文件,點擊File-Install Firemare,選擇這個文件,安裝成功。
下載psv游戲(是個壓縮包),zip格式,rar格式,或者vpk文件,解壓到一個文件夾,然後把解壓的文件夾放到Users用戶名下,可以點擊File-Open Pref Path打開文件夾。
點Refresh刷新就可以看到游戲列表了。
例如,點擊游戲《可塑性記憶》,彈出遊戲啟動界面,Manual是用戶手冊。點Start開始游戲,然後可以玩了。
軟體介紹:
《PS Vita Project軟體》是一款能完美的在手機上運行的psv模擬器,軟體是一款純粹的模擬器不包含任何的游戲在內,模擬起來的感覺非常的流暢,而且按鍵的設置也是靈活多變的。
I. 哪位大神幫幫我,我設置的是簡體中文,但是編譯出來的輸出語句不是簡體中文,為什麼
編碼問題,你看看你的ide編碼是utf-8還是gbk,然後看看終端編碼(在終端左上角-屬性(當前代碼頁)可以看到)。改為一樣就行了。