Browse Source

修改部分线程内存位置

master
sc 2 weeks ago
parent
commit
72bbf093b2
  1. 18
      applications/PLC_link.c
  2. 19
      applications/SCCM_link.c
  3. 4
      applications/data/DATA_comm.c
  4. 40
      applications/sql/DB_SQLite.c
  5. 2
      applications/wdt.c
  6. 5
      drivers/board.c
  7. 2
      drivers/include/drv_sdio.h
  8. 4
      packages/sqlite/sqlite3.c

18
applications/PLC_link.c

@ -70,12 +70,24 @@ static void mb_plc_thread(void *args)//线程服务函数
rt_thread_mdelay(50); 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) 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_ASSERT(tid != NULL);
rt_thread_startup(tid); rt_thread_startup(tid);*/
return(0); return(0);
} }
INIT_APP_EXPORT(mb_rtu_master_startup); INIT_APP_EXPORT(mb_rtu_master_startup);

19
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) 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) if (tid != RT_NULL)
{ {
rt_thread_startup(tid); rt_thread_startup(tid);
@ -100,6 +113,6 @@ int start_uart_thread(void)
{ {
LOG_E("Failed to create SCCM_uart thread!"); LOG_E("Failed to create SCCM_uart thread!");
return -1; return -1;
} }*/
} }
INIT_COMPONENT_EXPORT(start_uart_thread); INIT_COMPONENT_EXPORT(start_uart_thread);

4
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 struct rt_thread dat_comm_thread;
static void *dat_comm_stack __attribute__((aligned(4)))= RT_NULL ; static void *dat_comm_stack __attribute__((aligned(4)))= RT_NULL ;
int data_comm_init(void) int data_comm_init(void)
@ -587,7 +587,7 @@ int data_comm_init(void)
return -1; 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); 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) if(dat_err != RT_EOK)

40
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 return_disabled(struct db_command *cmd);
static void handle_db_command(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); 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 = static const char *sql_upgrade_workorder_steps =
"CREATE TABLE WorkorderSteps (WorkOrder VARCHAR,DYELOT VARCHAR,ProgramID VARCHAR,Program VARCHAR,ReDye INT DEFAULT (0)," "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," "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) void db_sqlite_init_full(void)
{ {
LOG_D("[DataBase] Init SQLite"); 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(); sqlite3_initialize();
if (access(DB_NAME, F_OK) != 0) if (access(DB_NAME, F_OK) != 0)
@ -190,9 +195,7 @@ void db_sqlite_init_full(void)
{ {
sqlite3_close(g_db); sqlite3_close(g_db);
//限制缓存大小 (100KB) //限制缓存大小 (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);
g_db = RT_NULL; g_db = RT_NULL;
} }
return; // return; //
@ -235,15 +238,15 @@ void db_sqlite_init_full(void)
} }
LOG_D("[DataBase] New database created. Creating tables Name (%s)",DB_NAME); LOG_D("[DataBase] New database created. Creating tables Name (%s)",DB_NAME);
sqlite3_close(g_db);
g_db=RT_NULL;
} }
}else { }else {
if (sqlite3_open(DB_NAME, &g_db) == SQLITE_OK) 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); 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; db_enabled = RT_TRUE;
static rt_bool_t first_wait_done = RT_FALSE;
while (1) 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; continue;
}else{first_wait_done = RT_TRUE;}
//检查排队超时 //检查排队超时
rt_tick_t now = rt_tick_get(); rt_tick_t now = rt_tick_get();
@ -321,10 +333,10 @@ static void db_sqlite(void *parameter) {
continue; continue;
} else { } else {
//限制缓存大小 (100KB) //限制缓存大小 (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); //sqlite3_exec(g_db, "PRAGMA temp_store = FILE;", 0, 0, 0);
rt_kprintf("Opened database: %s\n", DB_NAME); //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); 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) 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_startup(&dat_sqlite_thread);
/*rt_thread_t tid; /*rt_thread_t tid;
tid = rt_thread_create("db_sql", db_sqlite, RT_NULL, 1024 *14, 18, 10); tid = rt_thread_create("db_sql", db_sqlite, RT_NULL, 1024 *16, 18, 10);
if (tid != RT_NULL) if (tid != RT_NULL)
{ {

2
applications/wdt.c

@ -69,4 +69,4 @@ static int wdt_sample()
return ret; return ret;
} }
INIT_APP_EXPORT(wdt_sample); //INIT_APP_EXPORT(wdt_sample);

5
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() 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); extern void hw_board_init(char *clock_src, int32_t clock_src_freq, int32_t clock_target_freq);
/* Heap initialization */ /* Heap initialization */

2
drivers/include/drv_sdio.h

@ -44,7 +44,7 @@
#endif #endif
#ifndef SDIO_MAX_FREQ #ifndef SDIO_MAX_FREQ
#define SDIO_MAX_FREQ (25 * 1000 * 1000) #define SDIO_MAX_FREQ (50 * 1000 * 1000)
#endif #endif
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))

4
packages/sqlite/sqlite3.c

@ -20727,6 +20727,10 @@ static malloc_zone_t* _sqliteZone_;
** Use standard C library malloc and free on non-Apple systems. ** Use standard C library malloc and free on non-Apple systems.
** Also used by rt-thread systems if SQLITE_WITHOUT_ZONEMALLOC is defined. ** 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_MALLOC(x) rt_malloc((rt_size_t)x)
#define SQLITE_FREE(x) rt_free(x) #define SQLITE_FREE(x) rt_free(x)
#define SQLITE_REALLOC(x,y) rt_realloc((x),(rt_size_t)(y)) #define SQLITE_REALLOC(x,y) rt_realloc((x),(rt_size_t)(y))

Loading…
Cancel
Save