diff --git a/applications/PLC_link.c b/applications/PLC_link.c index 98a59c5..a1b9b5b 100644 --- a/applications/PLC_link.c +++ b/applications/PLC_link.c @@ -70,12 +70,24 @@ static void mb_plc_thread(void *args)//线程服务函数 rt_thread_mdelay(50); } } - +extern struct rt_memheap sram_DTCMRAM; +static struct rt_thread dat_plc_thread; +static void *dat_plc_stack __attribute__((aligned(4)))= RT_NULL ; static int mb_rtu_master_startup(void) { - rt_thread_t tid = rt_thread_create("plc_rtu", mb_plc_thread, NULL, 2048, 5, 20); + rt_err_t db_err; + dat_plc_stack = rt_memheap_alloc(&sram_DTCMRAM, 1024*2); + db_err = rt_thread_init(&dat_plc_thread, "plc_rtu", mb_plc_thread, RT_NULL,dat_plc_stack, 1024*2, 10, 10); + if(db_err != RT_EOK) + { + LOG_D("Failed to create SCCM_uart thread!"); + return -1; + } + rt_thread_startup(&dat_plc_thread); + LOG_I("Create SCCM_uart thread"); + /*rt_thread_t tid = rt_thread_create("plc_rtu", mb_plc_thread, NULL, 2048, 5, 20); RT_ASSERT(tid != NULL); - rt_thread_startup(tid); + rt_thread_startup(tid);*/ return(0); } INIT_APP_EXPORT(mb_rtu_master_startup); diff --git a/applications/SCCM_link.c b/applications/SCCM_link.c index a02b9fb..62bf311 100644 --- a/applications/SCCM_link.c +++ b/applications/SCCM_link.c @@ -86,10 +86,23 @@ void uart_thread_entry(void *parameter) } } } - +extern struct rt_memheap sram_DTCMRAM; +static struct rt_thread dat_uart_thread; +static void *dat_uart_stack __attribute__((aligned(4)))= RT_NULL ; int start_uart_thread(void) { - rt_thread_t tid = rt_thread_create("sccm",uart_thread_entry,RT_NULL,2048,11,10); + rt_err_t db_err; + dat_uart_stack = rt_memheap_alloc(&sram_DTCMRAM, 1024*2); + db_err = rt_thread_init(&dat_uart_thread, "sccm", uart_thread_entry, RT_NULL,dat_uart_stack, 1024*2, 11, 10); + if(db_err != RT_EOK) + { + LOG_D("Failed to create SCCM_uart thread!"); + return -1; + } + rt_thread_startup(&dat_uart_thread); + LOG_I("Create SCCM_uart thread"); + return 0; + /* rt_thread_t tid = rt_thread_create("sccm",uart_thread_entry,RT_NULL,2048,11,10); if (tid != RT_NULL) { rt_thread_startup(tid); @@ -100,6 +113,6 @@ int start_uart_thread(void) { LOG_E("Failed to create SCCM_uart thread!"); return -1; - } + }*/ } INIT_COMPONENT_EXPORT(start_uart_thread); diff --git a/applications/data/DATA_comm.c b/applications/data/DATA_comm.c index a5d842e..909d091 100644 --- a/applications/data/DATA_comm.c +++ b/applications/data/DATA_comm.c @@ -574,7 +574,7 @@ void proc_thread_entry(void *parameter) } } -extern struct rt_memheap sdram_heap; +extern struct rt_memheap sram_DTCMRAM; static struct rt_thread dat_comm_thread; static void *dat_comm_stack __attribute__((aligned(4)))= RT_NULL ; int data_comm_init(void) @@ -587,7 +587,7 @@ int data_comm_init(void) return -1; } - dat_comm_stack = rt_memheap_alloc(&sdram_heap, 1024*6); + dat_comm_stack = rt_memheap_alloc(&sram_DTCMRAM, 1024*6); dat_err = rt_thread_init(&dat_comm_thread, "dat_comm", proc_thread_entry, RT_NULL,dat_comm_stack, 1024*6, 15, 10); if(dat_err != RT_EOK) diff --git a/applications/sql/DB_SQLite.c b/applications/sql/DB_SQLite.c index 85bdafe..5e0ad48 100644 --- a/applications/sql/DB_SQLite.c +++ b/applications/sql/DB_SQLite.c @@ -36,6 +36,7 @@ static void return_timeout(struct db_command *cmd); static void return_disabled(struct db_command *cmd); static void handle_db_command(struct db_command *cmd); static int callback(void *result_str, int argc, char **argv, char **azColName); +extern int sqlite3_init_with_sdram_heap(void); static const char *sql_upgrade_workorder_steps = "CREATE TABLE WorkorderSteps (WorkOrder VARCHAR,DYELOT VARCHAR,ProgramID VARCHAR,Program VARCHAR,ReDye INT DEFAULT (0)," "Mode VARCHAR,Step INT,StepID VARCHAR,StepName VARCHAR,ParameterName VARCHAR,P1 DOUBLE,P2 DOUBLE,P3 DOUBLE," @@ -179,6 +180,10 @@ void close_db_immediately(void) { void db_sqlite_init_full(void) { LOG_D("[DataBase] Init SQLite"); + if (sqlite3_init_with_sdram_heap() != 0) + { + LOG_E("Failed to set memory"); + }else{ LOG_D("set memory");} sqlite3_initialize(); if (access(DB_NAME, F_OK) != 0) @@ -190,9 +195,7 @@ void db_sqlite_init_full(void) { sqlite3_close(g_db); //限制缓存大小 (100KB) - sqlite3_exec(g_db, "PRAGMA cache_size = -50;", 0, 0, 0); - //设置临时存储为文件模式 (节省内存) - sqlite3_exec(g_db, "PRAGMA temp_store = FILE;", 0, 0, 0); + sqlite3_exec(g_db, "PRAGMA cache_size = 50;", 0, 0, 0); g_db = RT_NULL; } return; // @@ -235,15 +238,15 @@ void db_sqlite_init_full(void) } LOG_D("[DataBase] New database created. Creating tables Name (%s)",DB_NAME); + sqlite3_close(g_db); + g_db=RT_NULL; } }else { if (sqlite3_open(DB_NAME, &g_db) == SQLITE_OK) { - //限制缓存大小 (100KB) - sqlite3_exec(g_db, "PRAGMA cache_size = -50;", 0, 0, 0); - //设置临时存储为文件模式 (节省内存) - sqlite3_exec(g_db, "PRAGMA temp_store = FILE;", 0, 0, 0); LOG_D("[DataBase] NAME (%s)",DB_NAME); + sqlite3_close(g_db); + g_db=RT_NULL; } } } @@ -276,12 +279,21 @@ static void db_sqlite(void *parameter) { // 默认启用数据库 db_enabled = RT_TRUE; - + static rt_bool_t first_wait_done = RT_FALSE; while (1) { // 接收命令 - if (rt_mq_recv(db_mq, &cmd, sizeof(struct db_command), RT_WAITING_FOREVER) <= RT_EOK) + if (rt_mq_recv(db_mq, &cmd, sizeof(struct db_command), 500) <= RT_EOK) + { + if (first_wait_done) + { + first_wait_done = RT_FALSE; + //sqlite3_exec(g_db, "PRAGMA shrink_memory;", 0, 0, 0); + sqlite3_close(g_db); + g_db=RT_NULL; + } continue; + }else{first_wait_done = RT_TRUE;} //检查排队超时 rt_tick_t now = rt_tick_get(); @@ -321,10 +333,10 @@ static void db_sqlite(void *parameter) { continue; } else { //限制缓存大小 (100KB) - sqlite3_exec(g_db, "PRAGMA cache_size = -50;", 0, 0, 0); + //sqlite3_exec(g_db, "PRAGMA cache_size = -50;", 0, 0, 0); //设置临时存储为文件模式 (节省内存) - sqlite3_exec(g_db, "PRAGMA temp_store = FILE;", 0, 0, 0); - rt_kprintf("Opened database: %s\n", DB_NAME); + //sqlite3_exec(g_db, "PRAGMA temp_store = FILE;", 0, 0, 0); + //rt_kprintf("Opened database: %s\n", DB_NAME); } } @@ -422,12 +434,12 @@ void thread_DB_SQLite(void) db_err = rt_thread_init(&dat_sqlite_thread, "db_sql", db_sqlite, RT_NULL,dat_sqlite_stack, 1024*16, 15, 10); if(db_err != RT_EOK) { - LOG_D("Failed to create SQLite thread!\n"); + LOG_D("Failed to create SQLite thread!"); } rt_thread_startup(&dat_sqlite_thread); - /* rt_thread_t tid; - tid = rt_thread_create("db_sql", db_sqlite, RT_NULL, 1024 *14, 18, 10); + /*rt_thread_t tid; + tid = rt_thread_create("db_sql", db_sqlite, RT_NULL, 1024 *16, 18, 10); if (tid != RT_NULL) { diff --git a/applications/wdt.c b/applications/wdt.c index 7ef05f3..82cb6b2 100644 --- a/applications/wdt.c +++ b/applications/wdt.c @@ -69,4 +69,4 @@ static int wdt_sample() return ret; } -INIT_APP_EXPORT(wdt_sample); +//INIT_APP_EXPORT(wdt_sample); diff --git a/drivers/board.c b/drivers/board.c index 4ed5cd1..2085b85 100644 --- a/drivers/board.c +++ b/drivers/board.c @@ -16,6 +16,11 @@ struct rt_memheap sram_DTCMRAM,sram_AXIRAM,sram_SRAM1,sram_SRAM2; rt_weak void rt_hw_board_init() { + /* 允许未对齐访问(Cortex-M3/M4/M7 支持) */ + //SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; // ← 默认是 1(禁止) + // 要允许,应该 CLEAR 这个位! + //SCB->CCR &= ~SCB_CCR_UNALIGN_TRP_Msk; + extern void hw_board_init(char *clock_src, int32_t clock_src_freq, int32_t clock_target_freq); /* Heap initialization */ diff --git a/drivers/include/drv_sdio.h b/drivers/include/drv_sdio.h index e3c6ac0..09d8af5 100644 --- a/drivers/include/drv_sdio.h +++ b/drivers/include/drv_sdio.h @@ -44,7 +44,7 @@ #endif #ifndef SDIO_MAX_FREQ -#define SDIO_MAX_FREQ (25 * 1000 * 1000) +#define SDIO_MAX_FREQ (50 * 1000 * 1000) #endif #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) diff --git a/packages/sqlite/sqlite3.c b/packages/sqlite/sqlite3.c index 6f5295f..1310718 100644 --- a/packages/sqlite/sqlite3.c +++ b/packages/sqlite/sqlite3.c @@ -20727,6 +20727,10 @@ static malloc_zone_t* _sqliteZone_; ** Use standard C library malloc and free on non-Apple systems. ** Also used by rt-thread systems if SQLITE_WITHOUT_ZONEMALLOC is defined. */ +extern struct rt_memheap sdram_heap,sram_SRAM1,sram_DTCMRAM; +//#define SQLITE_MALLOC(x) rt_memheap_alloc(&sram_DTCMRAM,(rt_size_t)x) +//#define SQLITE_FREE(x) rt_free(x) +//#define SQLITE_REALLOC(x,y) rt_memheap_realloc(&sram_DTCMRAM,(x),(rt_size_t)(y)) #define SQLITE_MALLOC(x) rt_malloc((rt_size_t)x) #define SQLITE_FREE(x) rt_free(x) #define SQLITE_REALLOC(x,y) rt_realloc((x),(rt_size_t)(y))