久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


曙海教育集團(tuán)論壇開(kāi)發(fā)語(yǔ)言培訓(xùn)專(zhuān)區(qū)C語(yǔ)言開(kāi)發(fā) → ELF 程序開(kāi)發(fā)教程及技術(shù)討論專(zhuān)貼


  共有8044人關(guān)注過(guò)本帖樹(shù)形打印

主題:ELF 程序開(kāi)發(fā)教程及技術(shù)討論專(zhuān)貼

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個(gè)性首頁(yè) | 博客 | 信息 | 搜索 | 郵箱 | 主頁(yè) | UC


加好友 發(fā)短信
等級(jí):青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊(cè):2010-11-12 11:08:23
ELF 程序開(kāi)發(fā)教程及技術(shù)討論專(zhuān)貼  發(fā)帖心情 Post By:2010-12-10 11:07:00

西門(mén)子x65/x75上的 ELF 程序大家已經(jīng)見(jiàn)識(shí)過(guò)了,你有沒(méi)想過(guò)寫(xiě)出自己的 ELF 程序呢?如果你有C語(yǔ)言基礎(chǔ),那么加入 ELF 程序開(kāi)發(fā)的隊(duì)伍吧。
要在西門(mén)子x65/x75上使用 ELF 程序,你應(yīng)該確定自己的機(jī)器上正確的刷了適合你機(jī)型的3個(gè)補(bǔ)丁(如下):
function library
elfloader
swi-hook
查看機(jī)型在待機(jī)下輸入 *#06# 選更多,sW-Version一行就是了
現(xiàn)在的 ELF 程序一般是被刷過(guò)以上3個(gè)補(bǔ)丁的正確版本的機(jī)器所通用的(也有可能會(huì)限制機(jī)型,看程序怎么寫(xiě)的了8-) )
下面進(jìn)入正題

目錄:
1.IAR SI 安裝
2.在手機(jī)上運(yùn)行 ELF 程序

3.如何用 IAR 編寫(xiě) ELF
4.例1:內(nèi)存和文件的操作
5.例2:屏幕輸出和鍵盤(pán)控制
6.例3:一個(gè)后臺(tái)計(jì)時(shí)的小程序
7.例4:內(nèi)存駐留程序
8.FAQ


1.IAR SI 安裝
www.iar.com下載 IAR Embedded Workbench  For ARM 的30天試用版,最新版為4.41好象(>100 mb),程序下載是免費(fèi)的,但是會(huì)要你先注冊(cè)。填寫(xiě)正確的油箱以后,就會(huì)把使用序列號(hào)發(fā)給你。安裝沒(méi)說(shuō)的了吧,一路下一步,下一步,等等。

2.在手機(jī)上運(yùn)行 ELF 程序
論壇上很多說(shuō)明了,再扯就遠(yuǎn)了點(diǎn):-')

3.如何用 IAR 編寫(xiě) ELF
開(kāi)始一個(gè) ELF 程序的編寫(xiě),還是比較簡(jiǎn)單 :P
在菜單上選擇 “Project->Create New Project”
然后選添加"Project->Add Files"把你用其他IDE寫(xiě)好的C程序添加進(jìn)來(lái)就可以了
工程必須還要有 func.asm (入口點(diǎn)) 和 div.r79 (這個(gè)好象莫必要?我也不太清楚,我是業(yè)余的:( )
C程序知道怎么寫(xiě),問(wèn)題就不大。
你可能會(huì)問(wèn),怎么使用到手機(jī)里面那些需要的功能函數(shù)呢?這就需要 swilib.h 這個(gè)頭文件了(附件提供),這里面定義了n多函數(shù),大家看名字猜吧。。。因?yàn)闆](méi)說(shuō)明,滅辦法,唉。
上面的操作做好以后,就可以編譯我們的程序了,在 IAR 環(huán)境里左邊的 Workspace 下面,把 Debug 選成 Release,然后在工程上點(diǎn)右鍵,選屬性 CPU 可以不用改,下面的 Processor mode 改為 Arm,在 Library Configuration 標(biāo)簽里,把 Library 選成 None,就可以編譯了。這里你也可以在 Linker 里面設(shè)置相關(guān)連接選項(xiàng)。生成完畢后,你就可以在 你的工程\Release\Exe 目錄里找到生成的 ELF 文件,放到手機(jī)里看看呢?:P

4.例1:內(nèi)存和文件的操作
創(chuàng)建 main.c 如下后添加到你的工程里:
//main.c
#include "swilib.h"
void ElfKiller(void) { //用于 elf 退出時(shí)的相關(guān)操作
    extern void *ELF_BEGIN;
    //這里一般使用 mfree(), freeWS() 來(lái)釋放內(nèi)存
    ((void (*)(void *))(mfree_adr()))(ELF_BEGIN); // 懶得解釋 :(
}
int main(char *exename, char *fname) { //主函數(shù)
//參數(shù) exename 表示被動(dòng)使用的ELF? 格式 4:\Zbin\xyz.elf
//參數(shù) fname 傳遞文件名, 格式 0:\Misc\data.txt
//如果 ELF 啟動(dòng)自身則為 0
    char *mem;
    int i, err;
    int handle;
    if (fname) {
        //操作標(biāo)準(zhǔn)文件:
        handle = fopen(fname, A_ReadWrite+A_BIN+A_Append+A_Create, P_READ+P_WRITE, err);
        //表示按記錄文件打開(kāi),數(shù)據(jù)添加到文件末尾,如果文件不存在則創(chuàng)建之
        //如果為 handle=fopen (fname,A_ReadOnly+A_BIN, 0,err);
        //則表示按只讀方式打開(kāi)文件,具體常數(shù)參看 swilib.h
        if (handle != -1) { //-1 = error
            mem = malloc(10000); //分配內(nèi)存: AllocWS() 按行分配 (2b)
            if (mem != 0) { //0 = error
                i = fread(handle, mem, 10000, err); //返回讀取得字節(jié)數(shù),如果錯(cuò)誤返回 error。
                //放置你的代碼在這里 makesomebody (mem,i);
                fwrite(handle, mem, i, err);
                mfree(mem); //釋放內(nèi)存: FreeWS() 按行釋放
            }
            fclose(handle); //關(guān)閉文件
        }
    }
    SUBPROC((void *)ElfKiller); //放這個(gè)東西在這里就最好了,不存在也沒(méi)關(guān)系!
    return(0);
}
//PS. 由于 x65 中文件的讀取和記錄是按 32767 字節(jié)的塊操作的,
//因此將 fread() 和 fwrite() 改造為 fread32 () 和 fwrite32()
int fread32(int fh, char *buf, int len, unsigned int *err) { // (c) Rst7
    int clen;
    int rlen;
    int total=0;
    while (len) {
        if (len > 16384) clen = 16384; else clen = len;
        total += (rlen = fread(fh, buf, clen, err));
        if (rlen != clen) break;
        buf += rlen;
        len -= clen;
    }
    return(total);
}

最后不要忘了還有 func.asm 這個(gè)文件:
;Func.asm
    PUBLIC ELF_BEGIN
    RSEG ELFBEGIN:DATA
ELF_BEGIN
defadr MACRO a,b
   PUBLIC a
a EQU b
   ENDM
   END

5.例2:屏幕輸出和鍵盤(pán)控制
通過(guò)導(dǎo)航鍵控制屏幕上的符號(hào)移動(dòng),長(zhǎng)按紅鍵退出。本例子基于 TED- A (c) Of rst7
看本例時(shí)最好從下往上看:)

創(chuàng)建 main.c 如下后添加到你的工程里:
//main.c
//屏幕和鍵盤(pán)處理
#include "swilib.h"
typedef struct {
    GUI gui;
    //WSHDR *ws1;
    //WSHDR *ws2;
    //int i1;
} MAIN_GUI;
typedef struct {
    CSM_RAM csm;
    int gui_id;
} MAIN_CSM;
const int minus11 = -11;
const unsigned int INK = 0;
const unsigned int PAPER = 1;
volatile int xx = 0, yy = 0; //繪圖坐標(biāo)
const char bmp[12] = {0xFC, 0x86, 0xB3, 0xA9, 0xB1, 0xA9, 0x81, 0xFF, 0, 0, 0, 0};
const IMGHDR img = {8, 12, 0x1, 0, (char *)bmp};
//============
//屏幕輸出
//============
void DrwImg(IMGHDR *img, int x, int y, int *pen, int *brush)  {
    RECT rc;
    DRWOBJ drwobj;
    StoreXYWHtoRECT(rc, x, y, img->w, img->h);
    SetPropTo_Obj5(drwobj, &rc, 0, img);
    SetColor(drwobj, pen, brush);
    DrawObject(drwobj);
}
void DrawScreen(void) {
    int *ink = GetPaletteAdrByColorIndex(INK);
    int *paper = GetPaletteAdrByColorIndex(PAPER);
    int x = xx;
    DrwImg((IMGHDR *)img, x, yy, ink, paper);
}
//繪制屏幕
void method0(MAIN_GUI *data) {
    DrawScreen();
}
void method1(MAIN_GUI *data, void *(*malloc_adr)(int)) {}
void method2(MAIN_GUI *data, void (*mfree_adr)(void *)) {}
void method3(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) {}
void method4(MAIN_GUI *data, void (*mfree_adr)(void *)) {}
void method7(MAIN_GUI *data, void (*mfree_adr)(void *)) {}
int method8(void) {return(0);}
int method9(void) {return(0);}
//============
//按鍵控制
//============
int method5 (MAIN_GUI *data, GUI_MSG *msg) {
    //if (msg->gbsmsg->msg==KEY_UP) //釋放按鍵時(shí)
    if ((msg->gbsmsg->msg == KEY_DOWN) || (msg->gbsmsg->msg == LONG_PRESS)) //按下鍵或者長(zhǎng)按鍵時(shí)
        switch(msg->gbsmsg->submess) {
        case RED_BUTTON:
            return(1); //發(fā)生 generalFunc 流調(diào)用 GUI - > 關(guān)閉 GUI
        case UP_BUTTON:
            if (yy > 0) --yy; break;
        case LEFT_BUTTON:
            if (xx > 0) --xx; break;
        case DOWN_BUTTON:
            if (yy < 130) ++yy; break;
        case RIGHT_BUTTON:
            if ( xx < 120) ++xx; break;
        //case GREEN_BUTTON:
        //case RIGHT_SOFT:
        //case ENTER_BUTTON:
        //case LEFT_SOFT:
        //case VOL_UP_BUTTON:
        //case VOL_DOWN_BUTTON:
        //case '0':
        //case '9':
        //case '#':
        //SUBPROC((void *)DoDiskAccess,1);
        //降低其他處理的優(yōu)先級(jí)以繪制窗口
        }
    DrawScreen();
    return(0);
}
const void *const gui_methods[11] = {
    (void *)method0, //Redraw
    (void *)method1, //Create
    (void *)method2, //Close
    (void *)method3, //Focus
    (void *)method4, //Unfocus
    (void *)method5, //OnKey
    0,
    (void *)method7, //Destroy
    (void *)method8,
    (void *)method9,
    0
};
const RECT Canvas={0,0,131,175};
void maincsm_oncreate(CSM_RAM *data) {
    MAIN_GUI *main_gui = malloc(sizeof (MAIN_GUI));
    MAIN_CSM *csm = (MAIN_CSM *)data;
    zeromem(main_gui, sizeof (MAIN_GUI));
    //ustk=malloc(STKSZ); //為程序分配內(nèi)存
    //info_ws=AllocWS(512);
    main_gui->gui.canvas = (void *)(Canvas);
    main_gui->gui.flag30 = 2;
    main_gui->gui.methods = (void *)gui_methods; //基本方法(見(jiàn)上面)
    main_gui->gui.item_ll.data_mfree = (void (*)(void *))mfree_adr(); //我也不清楚:(
    csm->csm.state = 0;
    csm->csm.unk1 = 0;
    csm->gui_id = CreateGUI(main_gui); //直接創(chuàng)建 GUI
}
void Killer(void) { //退出程序
    extern void *ELF_BEGIN;
    //mfree(ustk); //釋放內(nèi)存
    //FreeWS(info_ws);
    ((void (*)(void *))(mfree_adr()))(ELF_BEGIN);
}
void maincsm_onclose(CSM_RAM *csm) {
    //GBS_StopTimer(light_tmr);
    SUBPROC((void *)Killer);
}
int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg) {
    return(1);
}
unsigned short maincsm_name_body[140];
const struct {
    CSM_DESC maincsm;
    WSHDR maincsm_name;
} MAINCSM = {
                {
                    maincsm_onmessage, //信息進(jìn)程
                    maincsm_oncreate, //創(chuàng)建時(shí)調(diào)用的方法
                    //如果機(jī)型為 S75 移除以下4行
                    //并在 swilib.h 里取消對(duì) #define NEWSGOLD 這行的注釋
                    //0,
                    //0,
                    //0,
                    //0,
                    maincsm_onclose, //關(guān)閉時(shí)調(diào)用的方法
                    sizeof (MAIN_CSM),
                    1,
                    minus11
                },
                {
                    maincsm_name_body,
                    NAMECSM_MAGIC1,
                    NAMECSM_MAGIC2,
                    0x0,
                    139
                }
            };
int main(char *exename, char *fname) {
    char dummy[sizeof (MAIN_CSM)];
    //strcpy(filename,fname); //保存數(shù)據(jù)到文件
    CreateCSM(MAINCSM.maincsm, dummy, 0);
    return 0;
}

支持(0中立(0反對(duì)(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

ELF 程序開(kāi)發(fā)教程及技術(shù)討論專(zhuān)貼








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
gogo大胆日本视频一区| 天天影视涩香欲综合网| 日韩一区二区不卡| 日韩欧美第一区| 久久久蜜桃精品| 国产精品女同一区二区三区| 一区在线中文字幕| 午夜欧美电影在线观看| 国产一区在线视频| 91视频www| 欧美主播一区二区三区美女 久久精品人| 日本亚洲欧洲精品| 精品视频1区2区| 久久麻豆一区二区| 亚洲午夜久久久久| 国产成人综合视频| 久久精品日产第一区二区三区乱码 | 精品视频1区2区| 26uuu国产日韩综合| 亚洲欧美国产三级| 久久99蜜桃精品| 91九色对白| 一区二区三区四区在线视频| 制服丝袜亚洲播放| 国产精品系列在线| 久久av资源网| 精品视频第一区| 欧美电影一区二区| 亚洲精品成a人| 国产又黄又大久久| 激情久久av| 欧美美女直播网站| 伊人夜夜躁av伊人久久| 国产精品一级片在线观看| 玛丽玛丽电影原版免费观看1977| 欧美体内she精高潮| 国产精品美女一区二区在线观看| 青青草视频一区| 国产成人在线电影| 日韩偷拍一区二区| 久久午夜电影网| 视频一区国产视频| av激情久久| 欧美日韩国产综合一区二区| 亚洲人一二三区| 成人丝袜视频网| 色噜噜狠狠成人网p站| 国产精品日产欧美久久久久| 精品在线观看视频| 四虎影院一区二区三区| 久久综合久久鬼色中文字| 日韩电影在线观看网站| 国产一区在线免费观看| 欧美电视剧在线观看完整版| 丝袜脚交一区二区| 欧洲精品码一区二区三区免费看| 精品国精品自拍自在线| 毛片av一区二区| 亚洲国产日韩美| 国产精品丝袜黑色高跟| 成人免费视频播放| 欧美蜜桃一区二区三区| 日韩精品免费视频人成| 日韩在线导航| 亚洲男人的天堂网| 91免费看片在线观看| 欧美一区二区在线播放| 免费人成在线不卡| 日韩高清三级| 亚洲乱码国产乱码精品精98午夜| 91看片淫黄大片一级在线观看| 91精品国产综合久久久久久| 三级亚洲高清视频| 视频一区免费观看| 亚洲精品第一国产综合野| 国产一级特黄a大片99| 国产色婷婷亚洲99精品小说| www.日韩av| 精品毛片乱码1区2区3区| 国产尤物一区二区在线| 在线免费不卡视频| 日本成人在线一区| 91国内精品野花午夜精品| 日韩在线一二三区| 一本一道综合狠狠老| 日日摸夜夜添夜夜添精品视频| 欧美一区二区影视| 自拍偷拍欧美精品| 国产精品一区二区三区观看| 国产精品丝袜一区| 精品日本一区二区| 一区二区三区中文字幕精品精品| 久久久久一区二区三区| 亚洲另类中文字| 日韩.欧美.亚洲| 亚洲福利一区二区三区| 伊人久久99| 麻豆国产欧美日韩综合精品二区| 在线免费精品视频| 国产精品456| 337p粉嫩大胆色噜噜噜噜亚洲 | 精品一二三四区| 欧美丰满嫩嫩电影| 成人黄色电影在线| 久久久久久综合| 久久av一区二区| 天天av天天翘天天综合网| 欧美伊人精品成人久久综合97| 激情欧美一区二区| 欧美www视频| 精品久久久久久中文字幕动漫| 一区二区三区在线观看视频| 亚洲精品中文综合第一页| 美国三级日本三级久久99| 欧美一级日韩一级| 99c视频在线| 亚洲午夜私人影院| 9191精品国产综合久久久久久| 99久久婷婷国产综合精品电影| 国产精品久久久久久久久免费樱桃| 麻豆成人小视频| 久久不见久久见免费视频7| 精品久久一区二区| 久久手机视频| 老司机精品视频在线| 亚洲精品一区二区三区香蕉| 久久久精品动漫| 韩国v欧美v亚洲v日本v| 久久精子c满五个校花| 午夜精品福利一区二区| 国产成人av资源| 最新日韩av在线| 欧美日韩激情一区二区三区| 99se婷婷在线视频观看| 亚洲第一综合色| 久久中文娱乐网| 亚洲一卡二卡三卡| 97精品久久久久中文字幕| 亚洲午夜精品17c| 欧美xxxxxxxxx| 婷婷五月色综合| 成人h动漫精品| 五月天亚洲婷婷| 国产欧美日韩卡一| 色综合一区二区三区| 91丨九色丨尤物| 奇米四色…亚洲| 国产精品伦理在线| 91精品国产91综合久久蜜臀| 日本精品视频一区| 99麻豆久久久国产精品免费| 天天影视色香欲综合网老头| 久久综合色鬼综合色| 色综合久久中文综合久久97| av激情亚洲男人天堂| 日本 国产 欧美色综合| 一区视频在线播放| 日韩欧美视频在线| 在线码字幕一区| 精品国产乱码久久久久久郑州公司 | 成人综合婷婷国产精品久久 | 国产精成人品localhost| 麻豆国产一区二区| 亚洲综合网站在线观看| 久久色在线观看| 91精品国产综合久久久久久久久久| 久久精品成人一区二区三区蜜臀| 国产精品99久久久久久宅男| 亚洲国产日韩a在线播放性色| 久久美女高清视频| 欧美精品高清视频| 色香蕉成人二区免费| 欧美专区一二三 | 神马影院午夜我不卡影院| 成人免费视频网站入口| 国产成人免费在线| 蜜臀va亚洲va欧美va天堂| 一区二区三区免费观看| 亚洲国产高清在线| 精品国产乱码久久久久久闺蜜| 欧美日韩在线播放三区四区| 色播亚洲视频在线观看| 精品国产乱码久久久久久108| 91久久久一线二线三线品牌| 成人av网站免费观看| 国产精品一区二区男女羞羞无遮挡| 丝袜亚洲精品中文字幕一区| 一区二区在线观看不卡| 亚洲欧美日韩中文字幕一区二区三区| 久久人人97超碰com| 日韩女同互慰一区二区| 欧美肥大bbwbbw高潮| 欧美日本不卡视频| 欧美高清一级片在线| 欧美日韩亚洲综合在线| 欧美色网一区二区| 4438成人网| 精品女同一区二区| 久久综合久久鬼色中文字| 久久女同性恋中文字幕|