首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET Micro Framework 開發實戰 (一):MFDeploy Flash 遠端讀寫外掛

     編輯:關於.NET

前言

預設 MFDeploy 僅能部署 TinyCLR 及應用程式至特定 Flash 區塊。作者開發 Flash 遠端讀寫外掛,突破區塊限制,可讀寫 Bootstrap、Config、Code、Deployment、Storage、FileSystem 等所有區塊,並支援直接執行下載程式無需重啟。

Flash 區塊結構範例 (SAM9261_EK)

const BlockRange g_K9F2G_8_BlockStatus[] = {
  { BLOCKTYPE_BOOTSTRAP,    0,  1 },
  { BLOCKTYPE_CONFIG,       2,  2 },
  { BLOCKTYPE_CODE,         3, 24 },
  { BLOCKTYPE_DEPLOYMENT,  25, 29 },
  { BLOCKTYPE_DEPLOYMENT,  30, 34 },
  { BLOCKTYPE_DEPLOYMENT,  35, 39 },
  { BLOCKTYPE_DEPLOYMENT,  40, 48 },
  { BLOCKTYPE_STORAGE_A,   49, 49 },
  { BLOCKTYPE_STORAGE_B,   50, 50 },
  { BLOCKTYPE_FILESYSTEM,  51, FLASH_BLOCK_COUNT-1 }
};

外掛實作步驟

1. 建立 MFPlugInMenuItem 衍生類別

public class PlugInHandle : MFPlugInMenuItem {
  public override string Name { get { return "Read/Write Flash"; } }
  public override void OnAction(IMFDeployForm form, MFDevice device) {
    if (form == null || device == null) return;
    (new frmRWFlash(form, device)).ShowDialog();
  }
}

2. 取得 Flash 磁區對照表

呼叫 engine.GetFlashSectorMap() 取得 Monitor_FlashSectorMap.Reply,解析 m_address、m_size、m_flags (用途:Application、Bootstrap、Code、Config、Deployment、FileSystem、Storage 等)。

3. 讀寫 Flash 磁區

// 讀取
bool ret = engine.ReadMemory(addr, buflen, out bytData);
// 寫入
bool ret = engine.WriteMemory(addr, FileIndex.GetBytes(), 0, (int)FileIndex.HeadSize);

4. 突破權限限制 (修改 TinyCLR)

編輯 \CLR\Debugger\Debugger.cpp 中 CheckPermission 函數,直接回傳 true:

bool CLR_DBG_Debugger::CheckPermission(ByteAddress address, int mode) {
  NATIVE_PROFILE_CLR_DEBUGGER();
  return true; // 允許所有區塊讀寫
  /* 原本依區塊類型限制的 switch 邏輯註解掉 */
}

5. 部署與使用

  • 編譯外掛 DLL,複製至 MFDeploy.exe 同目錄下 PlugIn 資料夾。
  • 啟動 MFDeploy,Plug-in 選單出現 Read/Write Flash。
  • 介面支援:磁區列表、十六進位編輯器、Deployment 區直接下載 .pe 並 Run 執行 (免重啟)。

延伸應用

此外掛為後續「遠端檔案瀏覽器」奠基,並曾用於將 LCD 顯示用位圖下載至裝置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved