Dozingfiretruck 3 лет назад
Родитель
Сommit
d23b6c4cf7

+ 5 - 0
application/include/luat_conf_bsp.h

@@ -189,6 +189,11 @@ extern unsigned int gLVFlashTime;
 #define LUAT_USE_LVGL_TILEVIEW   //平铺视图 依赖页面PAGE
 #define LUAT_USE_LVGL_TILEVIEW   //平铺视图 依赖页面PAGE
 #define LUAT_USE_LVGL_WIN   //窗口 依赖容器CONT 按钮BTN 标签LABEL 图片IMG 页面PAGE
 #define LUAT_USE_LVGL_WIN   //窗口 依赖容器CONT 按钮BTN 标签LABEL 图片IMG 页面PAGE
 
 
+
+#define LUAT_SCRIPT_SIZE            512         //脚本区大小,必须为64KB的倍数
+#define LUAT_FS_SIZE                512         //文件系统大小,必须为64KB的倍数
+#define FLASH_FS_REGION_SIZE        (LUAT_FS_SIZE + LUAT_SCRIPT_SIZE)
+
 #define LV_HOR_RES_MAX          (240)
 #define LV_HOR_RES_MAX          (240)
 #define LV_VER_RES_MAX          (240)
 #define LV_VER_RES_MAX          (240)
 #define LV_COLOR_DEPTH          16
 #define LV_COLOR_DEPTH          16

+ 3 - 4
application/src/luat_fs_air105.c

@@ -32,10 +32,9 @@ struct lfs LFS;
 #define LFS_BLOCK_DEVICE_PROG_SIZE      (__FLASH_PAGE_SIZE__)
 #define LFS_BLOCK_DEVICE_PROG_SIZE      (__FLASH_PAGE_SIZE__)
 #define LFS_BLOCK_DEVICE_LOOK_AHEAD     (16)
 #define LFS_BLOCK_DEVICE_LOOK_AHEAD     (16)
 #define LFS_BLOCK_DEVICE_CACHE_SIZE     (256)
 #define LFS_BLOCK_DEVICE_CACHE_SIZE     (256)
-#define SCRIPT_LUADB_START_ADDR			(__FLASH_BASE_ADDR__ + __CORE_FLASH_BLOCK_NUM__ * __FLASH_BLOCK_SIZE__)
 // 根据头文件的定义, 算出脚本区和文件系统区的绝对地址
 // 根据头文件的定义, 算出脚本区和文件系统区的绝对地址
-const size_t script_luadb_start_addr = SCRIPT_LUADB_START_ADDR;
-const size_t lfs_fs_start_addr = SCRIPT_LUADB_START_ADDR + __SCRIPT_FLASH_BLOCK_NUM__ * __FLASH_BLOCK_SIZE__ ;
+const size_t script_luadb_start_addr = (__FLASH_BASE_ADDR__ + __FLASH_MAX_SIZE__ - FLASH_FS_REGION_SIZE * 1024);
+const size_t lfs_fs_start_addr = (__FLASH_BASE_ADDR__ + __FLASH_MAX_SIZE__ - LUAT_FS_SIZE * 1024);
 static HANDLE lfs_locker;
 static HANDLE lfs_locker;
 static int block_device_read(const struct lfs_config *cfg, lfs_block_t block,
 static int block_device_read(const struct lfs_config *cfg, lfs_block_t block,
         lfs_off_t off, void *buffer, lfs_size_t size)
         lfs_off_t off, void *buffer, lfs_size_t size)
@@ -192,7 +191,7 @@ int luat_fs_init(void) {
 		.filesystem = "luadb",
 		.filesystem = "luadb",
 		.mount_point = "/luadb/",
 		.mount_point = "/luadb/",
 	};
 	};
-	luat_luadb_act_size = __SCRIPT_FLASH_BLOCK_NUM__ * __FLASH_BLOCK_SIZE__;
+	luat_luadb_act_size = LUAT_SCRIPT_SIZE;
 	#ifdef LUAT_USE_FSKV
 	#ifdef LUAT_USE_FSKV
 	luat_luadb_act_size -= 64 * 1024;
 	luat_luadb_act_size -= 64 * 1024;
 	#endif
 	#endif

+ 1 - 2
bsp/air105/include/global_config.h

@@ -30,11 +30,10 @@
 #define CORE_TICK_BASE	(1000)
 #define CORE_TICK_BASE	(1000)
 #define HW_TICK_BASE	(48000000)
 #define HW_TICK_BASE	(48000000)
 #define __WDT_TO_MS__	(15000)
 #define __WDT_TO_MS__	(15000)
+#define __FLASH_MAX_SIZE__  (0x00400000)		//4M
 #define __FLASH_BLOCK_SIZE__ (0x00010000)
 #define __FLASH_BLOCK_SIZE__ (0x00010000)
 #define __FLASH_SECTOR_SIZE__ (0x00001000)
 #define __FLASH_SECTOR_SIZE__ (0x00001000)
 #define __FLASH_PAGE_SIZE__ (0x00000100)
 #define __FLASH_PAGE_SIZE__ (0x00000100)
-#define __CORE_FLASH_BLOCK_NUM__ (48)	//__FLASH_BASE_ADDR__ + __CORE_FLASH_BLOCK_NUM__ * __FLASH_BLOCK_SIZE__,是脚本区, 3M开始
-#define __SCRIPT_FLASH_BLOCK_NUM__	 (8)	//__SCRIPT_FLASH_BLOCK_NUM__ * __FLASH_BLOCK_SIZE__,是脚本区长度,512K,剩余512K是文件区
 #define __FLASH_BASE_ADDR__ (0x01000000)
 #define __FLASH_BASE_ADDR__ (0x01000000)
 #define __RAMRUN_ISR_ADDR__ (0x20004000)
 #define __RAMRUN_ISR_ADDR__ (0x20004000)
 #define __SRAM_BASE_ADDR__ (0x20000000)
 #define __SRAM_BASE_ADDR__ (0x20000000)

+ 3 - 2
bsp/air105/platform/app_main.c

@@ -20,6 +20,7 @@
  */
  */
 
 
 #include "app_inc.h"
 #include "app_inc.h"
+#include "luat_conf_bsp.h"
 uint32_t SystemCoreClock;
 uint32_t SystemCoreClock;
 uint8_t gMainWDTEnable;
 uint8_t gMainWDTEnable;
 static HANDLE prvWDTTimer;
 static HANDLE prvWDTTimer;
@@ -40,8 +41,8 @@ const uint32_t __attribute__((section (".app_info")))
 	&__isr_start_address,
 	&__isr_start_address,
 	__BL_VERSION__,
 	__BL_VERSION__,
 	__CORE_VERSION__,
 	__CORE_VERSION__,
-	SCRIPT_LUADB_START_ADDR,
-	SCRIPT_LUADB_START_ADDR + __SCRIPT_FLASH_BLOCK_NUM__ * __FLASH_BLOCK_SIZE__,
+	__FLASH_BASE_ADDR__ + __FLASH_MAX_SIZE__ - FLASH_FS_REGION_SIZE * 1024,
+	__FLASH_BASE_ADDR__ + __FLASH_MAX_SIZE__ - LUAT_FS_SIZE * 1024,
 	0,
 	0,
 	0,
 	0,
 };
 };

+ 3 - 1
bsp/common/src/core_service.c

@@ -21,6 +21,8 @@
 
 
 #include "user.h"
 #include "user.h"
 #ifdef __BUILD_OS__
 #ifdef __BUILD_OS__
+#include "global_config.h"
+#include "luat_conf_bsp.h"
 #include "zbar.h"
 #include "zbar.h"
 #include "symbol.h"
 #include "symbol.h"
 #include "image.h"
 #include "image.h"
@@ -612,7 +614,7 @@ static void prvCore_PrintTaskStack(HANDLE TaskHandle)
 	for(i = 0; i < 16, SP < StackAddress + Len; SP += 4)
 	for(i = 0; i < 16, SP < StackAddress + Len; SP += 4)
 	{
 	{
 		PC = *((uint32_t *) SP) - 4;
 		PC = *((uint32_t *) SP) - 4;
-		if ((PC > __FLASH_APP_START_ADDR__) && (PC < (__FLASH_BASE_ADDR__ + __CORE_FLASH_BLOCK_NUM__ * __FLASH_BLOCK_SIZE__)))
+		if ((PC > __FLASH_APP_START_ADDR__) && (PC < (__FLASH_BASE_ADDR__ + __FLASH_MAX_SIZE__ - FLASH_FS_REGION_SIZE * 1024)))
 		{
 		{
 
 
 	        if (PC % 2 == 0) {
 	        if (PC % 2 == 0) {

+ 27 - 1
xmake.lua

@@ -6,6 +6,10 @@ add_rules("mode.debug", "mode.release")
 
 
 local AIR105_VERSION = ""
 local AIR105_VERSION = ""
 local VM_64BIT = nil
 local VM_64BIT = nil
+local script_addr = nil
+local fs_addr = nil
+local LUAT_SCRIPT_SIZE = nil
+local LUAT_FS_SIZE = nil
 local with_luatos = true
 local with_luatos = true
 local luatos = "../LuatOS/"
 local luatos = "../LuatOS/"
 
 
@@ -249,6 +253,21 @@ if with_luatos then
         if LVGL_CONF == nil then target:add("deps", "lvgl") end
         if LVGL_CONF == nil then target:add("deps", "lvgl") end
         target:add("deps", "miniz")
         target:add("deps", "miniz")
         VM_64BIT = conf_data:find("\r#define LUAT_CONF_VM_64bit") or conf_data:find("\n#define LUAT_CONF_VM_64bit")
         VM_64BIT = conf_data:find("\r#define LUAT_CONF_VM_64bit") or conf_data:find("\n#define LUAT_CONF_VM_64bit")
+        local FDB_CONF = conf_data:find("\r#define LUAT_USE_FDB") or conf_data:find("\n#define LUAT_USE_FDB") or conf_data:find("\r#define LUAT_USE_FSKV") or conf_data:find("\n#define LUAT_USE_FSKV") 
+        LUAT_SCRIPT_SIZE = tonumber(conf_data:match("\r#define LUAT_SCRIPT_SIZE%s+(%d+)") or conf_data:match("\n#define LUAT_SCRIPT_SIZE%s+(%d+)"))
+        LUAT_FS_SIZE = tonumber(conf_data:match("\r#define LUAT_FS_SIZE%s+(%d+)") or conf_data:match("\n#define LUAT_FS_SIZE%s+(%d+)"))
+        FLASH_FS_REGION_SIZE = LUAT_SCRIPT_SIZE + LUAT_FS_SIZE
+        LUA_SCRIPT_ADDR = 16777216 + (4096 - FLASH_FS_REGION_SIZE) * 1024
+        LUA_FS_ADDR = LUA_SCRIPT_ADDR + LUAT_FS_SIZE * 1024
+        script_addr = string.format("%X", LUA_SCRIPT_ADDR)
+        fs_addr = string.format("%X", LUA_FS_ADDR)
+        if FDB_CONF then
+            FLASH_FS_REGION_SIZE = FLASH_FS_REGION_SIZE + 64
+        end
+        local LD_FLASH_SIZE = 4096-FLASH_FS_REGION_SIZE-64 --64KB为bl+ota信息占用
+        local ld_data = io.readfile("$(projectdir)/project/air105/app.ld")
+        ld_data = ld_data:gsub(2944,LD_FLASH_SIZE)
+        io.writefile("$(buildir)/out/app.ld", ld_data)
     end)
     end)
 
 
     -- add_deps("tflm")
     -- add_deps("tflm")
@@ -483,7 +502,7 @@ end
     -- add_files(luatos.."components/nes/*.cpp",luatos.."components/nes/luat/*.c",{public = true})
     -- add_files(luatos.."components/nes/*.cpp",luatos.."components/nes/luat/*.c",{public = true})
     -- add_includedirs(luatos.."components/nes",luatos.."components/nes/luat",{public = true})
     -- add_includedirs(luatos.."components/nes",luatos.."components/nes/luat",{public = true})
 
 
-    add_ldflags("-Wl,--whole-archive -Wl,--start-group ./lib/libgt.a ./lib/libencrypt.a -Wl,--end-group -Wl,--no-whole-archive","-Wl,-Map=./build/out/app.map","-Wl,-T$(projectdir)/project/air105/app.ld",{force = true})
+    add_ldflags("-Wl,--whole-archive -Wl,--start-group ./lib/libgt.a ./lib/libencrypt.a -Wl,--end-group -Wl,--no-whole-archive","-Wl,-Map=./build/out/app.map","-Wl,-T$(buildir)/out/app.ld",{force = true})
 
 
 	after_build(function(target)
 	after_build(function(target)
         sdk_dir = target:toolchains()[1]:sdkdir().."/"
         sdk_dir = target:toolchains()[1]:sdkdir().."/"
@@ -517,6 +536,12 @@ end
                 import("core.base.json")
                 import("core.base.json")
                 local info_table = json.loadfile("./project/air105/info.json")
                 local info_table = json.loadfile("./project/air105/info.json")
                 info_table["script"]["bitw"] = 64
                 info_table["script"]["bitw"] = 64
+
+                info_table["rom"]["fs"]["script"]["size"] = LUAT_SCRIPT_SIZE
+                info_table["fs"]["total_len"] = LUAT_FS_SIZE
+                info_table["download"]["script_addr"] = script_addr
+                info_table["download"]["fs_addr"] = fs_addr
+
                 json.savefile("./build/out/info.json", info_table)
                 json.savefile("./build/out/info.json", info_table)
             else
             else
                 os.cp("./project/air105/info.json", "$(buildir)/out/info.json")
                 os.cp("./project/air105/info.json", "$(buildir)/out/info.json")
@@ -528,6 +553,7 @@ end
             os.rm("$(buildir)/out/info.json")
             os.rm("$(buildir)/out/info.json")
             os.rm("$(buildir)/out/soc_download.exe")
             os.rm("$(buildir)/out/soc_download.exe")
             os.rm("$(buildir)/out/luat_conf_bsp.h")
             os.rm("$(buildir)/out/luat_conf_bsp.h")
+            os.rm("$(buildir)/out/app.ld")
         else
         else
             print("7z not find")
             print("7z not find")
             return
             return