diff --git a/.gitignore b/.gitignore
index 2248133..59e7c65 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,4 +15,5 @@ python/build/
python/dist/
*.xlsx
*.json
-quest_info.txt
\ No newline at end of file
+quest_info.txt
+*.jwt
\ No newline at end of file
diff --git a/checher_slave.uvoptx b/checher_slave.uvoptx
index 41a04fe..45c2405 100644
--- a/checher_slave.uvoptx
+++ b/checher_slave.uvoptx
@@ -164,7 +164,7 @@
1
- 0
+ 8
0x0801d000
0
@@ -389,7 +389,7 @@
1
0
- 0x08036000
+ 0x08004000
0
@@ -1634,18 +1634,6 @@
0
0
0
- .\source\task\tran_for_coder2ch.c
- tran_for_coder2ch.c
- 0
- 0
-
-
- 10
- 92
- 1
- 0
- 0
- 0
.\source\task\mod_signals.c
mod_signals.c
0
@@ -1653,7 +1641,7 @@
10
- 93
+ 92
1
0
0
@@ -1673,7 +1661,7 @@
0
11
- 94
+ 93
1
0
0
@@ -1693,7 +1681,7 @@
0
12
- 95
+ 94
1
0
0
@@ -1705,7 +1693,7 @@
12
- 96
+ 95
1
0
0
@@ -1717,7 +1705,7 @@
12
- 97
+ 96
1
0
0
@@ -1729,7 +1717,7 @@
12
- 98
+ 97
1
0
0
@@ -1741,7 +1729,7 @@
12
- 99
+ 98
1
0
0
@@ -1753,7 +1741,7 @@
12
- 100
+ 99
1
0
0
@@ -1773,7 +1761,7 @@
0
13
- 101
+ 100
5
0
0
@@ -1793,7 +1781,7 @@
0
14
- 102
+ 101
5
0
0
@@ -1805,7 +1793,7 @@
14
- 103
+ 102
5
0
0
diff --git a/checher_slave.uvprojx b/checher_slave.uvprojx
index 6be32e7..bacb51a 100644
--- a/checher_slave.uvprojx
+++ b/checher_slave.uvprojx
@@ -928,11 +928,6 @@
1
.\source\task\transmit.c
-
- tran_for_coder2ch.c
- 1
- .\source\task\tran_for_coder2ch.c
-
mod_signals.c
1
@@ -3492,11 +3487,6 @@
1
.\source\task\transmit.c
-
- tran_for_coder2ch.c
- 1
- .\source\task\tran_for_coder2ch.c
-
mod_signals.c
1
diff --git a/doc/JW3425_boot_v11.bin b/doc/JW3425_boot_v11.bin
new file mode 100644
index 0000000..43b7f66
Binary files /dev/null and b/doc/JW3425_boot_v11.bin differ
diff --git a/doc/creat_jwt_boot.py b/doc/creat_jwt_boot.py
index 1ad4434..7a6fcc6 100644
--- a/doc/creat_jwt_boot.py
+++ b/doc/creat_jwt_boot.py
@@ -5,7 +5,7 @@ import json
-BOOT_PATH ="JW3425_boot_v10.bin"
+BOOT_PATH ="JW3425_boot_v11.bin"
APP_PATH ="MS-IEpro20231007.bin"
OUT_PATH = BOOT_PATH.split('.')[0]+".jwt"
diff --git a/python/protmcu.py b/python/protmcu.py
index 5b5264e..6a34ee6 100644
--- a/python/protmcu.py
+++ b/python/protmcu.py
@@ -131,10 +131,13 @@ class protm:
-u=protm("com5")
+u=protm("com7")
# u.start_recv()
# u.wait()
-u.cmd=1
-u.addr=1
+u.addr=0
u.host_addr=0
-print(u.encode(bytearray()).hex(","))
+u.cmd=0x13
+print(u.encode(bytearray()).hex(" "))
+u.cmd=0x0c
+print(u.encode(bytearray()).hex(" "))
+
diff --git a/source/ReadMe.txt b/source/ReadMe.txt
index 6944490..c8cf938 100644
--- a/source/ReadMe.txt
+++ b/source/ReadMe.txt
@@ -198,3 +198,9 @@
自适应回复电流挡位,boot与app中均通信正常
全流程升级验证成功
拟实现主机发开始检测之后等待300ms再启动检测,防止主机未收到回应
+2023.10.11
+ 解决 tappend 多次加入相同临时指针时返回NULL指针的问题
+ prot_uc 最多接收消息数量上限是10 ,防止主机消息轰炸
+ prot_uc 处理命令的时间如果距离接收时间超过100ms时视为过期,不处理过期消息
+ bootloader 在升级之前会进行校验,如果不是slave的程序则不会升级
+ 使用赋码仪主板 app升级,方案升级验证通过
\ No newline at end of file
diff --git a/source/dev/dev_flash.c b/source/dev/dev_flash.c
index bd81ff3..eb269d9 100644
--- a/source/dev/dev_flash.c
+++ b/source/dev/dev_flash.c
@@ -106,7 +106,12 @@ static int flash_erase(uint32_t sector)
}
}
-
+// 擦除指定地址
+int flash_erase_addr(uint32_t addr)
+{
+ addr=addr-FLASH_BASE;
+ return flash_erase(addr/2048);
+}
// 操作开始
int flash_operate_start(void)
diff --git a/source/dev/dev_flash.h b/source/dev/dev_flash.h
index 3ae71b1..6df0779 100644
--- a/source/dev/dev_flash.h
+++ b/source/dev/dev_flash.h
@@ -35,6 +35,7 @@ uint32_t *flash_get_jwtcode(void);
int flash_write(uint8_t *addr,const uint8_t *data,int len);
int flash_operate_end(void);
int flash_write_with_erase(uint8_t *addr,const uint8_t *data,int len);
+int flash_erase_addr(uint32_t addr);
@@ -48,6 +49,7 @@ typedef struct{
uint8_t host_ip[4];
int host_port;
char host_if[8];
+ char device_type[12];
}rom_head;
@@ -68,17 +70,10 @@ typedef struct{
char host_if[8];// 主机接口
char device_type[12];// 设备类型 ,批检仪还是赋码仪
uint8_t mac[8];// mac地址
- uint8_t local_ip[4];// 本机ip地址
- uint8_t host_ip[4];// 主机ip地址
- int host_port;// 主机端口
- int local_cmd_port;// 本机命令端口
- int host_log_port;// 主机log端口
int local_id;// 本机识别号
- uint8_t host_log_ip[4];// 主机logip
- int uartbsp;// 串口4的波特率
- int coder_ret_mode;// 注码指令返回格式
- int slave_addr_start;// 小板起始地址
- int moter_max_count;// 电机最大步数
+ int uartbsp;// 串口的波特率
+ int hard_version;// 硬件版本号
+ int resistor_diff;// 电阻校准值
}sys_param_def;
diff --git a/source/elec_det/elec_cmd.c b/source/elec_det/elec_cmd.c
index a8e16ad..da7a273 100644
--- a/source/elec_det/elec_cmd.c
+++ b/source/elec_det/elec_cmd.c
@@ -79,6 +79,8 @@ static int cmd_iic_updata(list_def *argv)
if(ret==0){
MC_IICUpdateMTP();
ret=checker_runcfg.excue_rtv;
+ }else{
+ cmd_print("power set failed.");
}
PowerCalibration_set(POWER_DEF_V,45);
POWER_OFF;
diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c
index de2e454..eb07dda 100644
--- a/source/elec_det/elec_det.c
+++ b/source/elec_det/elec_det.c
@@ -2,6 +2,8 @@
#include "bytearray.h"
#include "mystdlib.h"
#include "debug.h"
+#include "stdlib.h"
+#include "dev_flash.h"
#include "elec_det.h"
#include "base/delay.h"
@@ -27,6 +29,7 @@
typedef struct{
CheckerTask_Info_st* task_info_array[PLAN_MAX_TASK];//方案参数结构体指针
int scheme_inited;
+ array_def *data;
}self_def;
@@ -38,13 +41,23 @@ static self_def g_self;
// 初始化
int elec_init(void)
{
- self_def *s=&g_self;
void Ye_BoardInit(void);
- void Ye_BoardCheck(void);
+ int elec_parper_power(void);
+ Ye_BoardInit();
+ elec_bootinfo();
+ DBG_LOG("local addr:%d.",elec_local_addr());
+ return elec_scheme_init();
+}
+
+
+// 初始化方案
+int elec_scheme_init(void)
+{
+ self_def *s=&g_self;
+ int ret=0;
int elec_check_scheme(void);
void elec_load_scheme(void);
- Ye_BoardInit();
- Ye_BoardCheck();
+ int elec_parper_power(void);
if(elec_check_scheme()!=0){
// 方案校验失败
DBG_WARN("scheme check failed.");
@@ -53,10 +66,36 @@ int elec_init(void)
}
s->scheme_inited=1;
elec_load_scheme();
- return 0;
+ ret=elec_parper_power();
+ return ret;
}
+// 调压
+static int elec_parper_power(void)
+{
+ self_def *s=&g_self;
+ CheckerTask_Info_st *task_par=0;
+ int ret=0;
+ task_par= s->task_info_array[0];
+ if(task_par->taskid!=0){
+ // 第一个任务不是调压任务,失败
+ DBG_WARN("parper power failed,first taskid is not 0.");
+ return 1;
+ }
+ // 装载参数
+ checker_runcfg.power_prapare_exe=0;
+ rt_memcpy(&checker_runcfg.task_info,task_par,sizeof(CheckerTask_Info_st));
+ checker_runcfg.param_count = checker_runcfg.task_info.param_rtv_count & 0x0F;
+ checker_runcfg.rtv_count = (checker_runcfg.task_info.param_rtv_count >> 4) & 0x0F;
+ rt_memcpy(checker_runcfg.params,checker_runcfg.task_info.params,checker_runcfg.param_count*2);
+ Checker_PowerPrapare();
+ ret=checker_runcfg.excue_rtv;
+ if(ret){
+ DBG_WARN("parper power failed,ret=%d.",ret);
+ }
+ return ret;
+}
@@ -64,8 +103,9 @@ int elec_init(void)
uint8_t elec_local_addr(void)
{
static uint8_t addr=0;
- if(addr==0)
+ if(addr==0){
addr=Gpio_GetDeivceAddr();
+ }
return addr;
}
@@ -84,11 +124,34 @@ void elec_led2_power(int power)
+
+// 获取自检参数
+array_def *elec_bootinfo(void)
+{
+ void Ye_BoardCheck(void);
+ Ye_BoardCheck();
+ board_st.hard_v=sys_param()->hard_version;
+ board_st.resistor_diff=sys_param()->resistor_diff;
+ board_st.hard_v=15;
+ array_def *r=arr_creat();
+ arr_append(r,0);
+ arr_appends(r,&board_st,sizeof(BoartCheck_st));
+ return arr_temp(r);
+}
+
+
+
// 获取检测结果
array_def *elec_check_result(void)
{
- array_def *r=arr_creat();
- arr_append(r,3);
+ self_def *s=&g_self;
+ array_def *r=0;
+ if(s->data){
+ r=arr_duplicate(s->data);
+ }else{
+ r=arr_creat();
+ arr_append(r,2);
+ }
return arr_temp(r);
}
@@ -96,8 +159,14 @@ array_def *elec_check_result(void)
// 写硬件版本号
array_def *elec_write_hardversion(int version)
{
- array_def *r=arr_creat();
+ sys_param_def *spar=0;
+ spar=calloc(1,sizeof(sys_param_def));
+ memcpy(spar,sys_param(),sizeof(sys_param_def));
+ spar->hard_version=version;
+ flash_save_param(spar);
+ free(spar);
board_st.hard_v=version;
+ array_def *r=arr_creat();
arr_append(r,0);
return arr_temp(r);
}
@@ -107,8 +176,14 @@ array_def *elec_write_hardversion(int version)
// 写电阻校准值
array_def *elec_write_resistor_cbv(int cbv)
{
- array_def *r=arr_creat();
+ sys_param_def *spar=0;
+ spar=calloc(1,sizeof(sys_param_def));
+ memcpy(spar,sys_param(),sizeof(sys_param_def));
+ spar->resistor_diff=cbv;
+ flash_save_param(spar);
+ free(spar);
board_st.resistor_diff=cbv;
+ array_def *r=arr_creat();
arr_append(r,0);
return 0;
}
@@ -283,6 +358,8 @@ array_def *elec_check_with_scheme(array_def *uid_psw)
arr_appends(r,checker_runcfg.Task_Result,8);
arr_appends(r,checker_runcfg.Task_Excute,8);
arr_appends(r,checker_runcfg.Test_Rtv,checker_runcfg.rtv_index*2);
+ CHECK_DO(s->data,arr_delete);
+ s->data=arr_duplicate(r);
return arr_temp(r);
}
diff --git a/source/elec_det/elec_det.h b/source/elec_det/elec_det.h
index d415c36..37e51cc 100644
--- a/source/elec_det/elec_det.h
+++ b/source/elec_det/elec_det.h
@@ -8,12 +8,16 @@
int elec_init(void);
+int elec_scheme_init(void);
+
uint8_t elec_local_addr(void);
void elec_led1_power(int power);
void elec_led2_power(int power);
+array_def *elec_bootinfo(void);
+
array_def *elec_check_result(void);
array_def *elec_write_hardversion(int version);
diff --git a/source/elec_det/interface/EWChecker.c b/source/elec_det/interface/EWChecker.c
index b6b7e64..8ffc850 100644
--- a/source/elec_det/interface/EWChecker.c
+++ b/source/elec_det/interface/EWChecker.c
@@ -219,6 +219,7 @@ static int EW_appRead(void)
DBG_LOG("addr=0x%02x.",addr);
ret=EW_ReadMTP(1,addr,read_buf,4);
DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read_buf[0],read_buf[1],read_buf[2],read_buf[3]);
+ return ret;
}
static int cmd_jwt_app_read(list_def *argv)
{
diff --git a/source/interface/if_can.c b/source/interface/if_can.c
index 0b9dc9f..7ecb4fe 100644
--- a/source/interface/if_can.c
+++ b/source/interface/if_can.c
@@ -369,6 +369,8 @@ static int h_init(uart_def *u,int bsp)
{
h_self_def *h=&g_hself;
if(h->inited) return 0;
+ // 设置主机接口 int类型,0uart,1can
+ app_variable("host_if",&h->dev_index,0);
h->dev[0]=dev_get("uart1");
h->dev[1]=dev_get("can");
h->dev[0]->init(h->dev[0],0);
diff --git a/source/interface/if_uart.c b/source/interface/if_uart.c
index bd891cc..98fdcff 100644
--- a/source/interface/if_uart.c
+++ b/source/interface/if_uart.c
@@ -386,6 +386,9 @@ static int write_block(uart_def *u,const uint8_t *b,int len)
param_check(u->private_data);
self_data *self=u->private_data;
USART_TypeDef *uart=self->dtb->uart;
+ if(self->in_send){
+ return 0;
+ }
self->in_send=1;
if(1){
dma_tx_init(self,b,len);
diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h
index ccc35b6..76534ed 100644
--- a/source/main/compiler_info.h
+++ b/source/main/compiler_info.h
@@ -6,7 +6,7 @@
-#define BUILD_DATE "2023-10-10 16:36:03"
+#define BUILD_DATE "2023-10-11 17:33:01"
#define SOFT_VERSION "0.03"
diff --git a/source/main/main.c b/source/main/main.c
index 4681c0a..cee15d0 100644
--- a/source/main/main.c
+++ b/source/main/main.c
@@ -172,20 +172,8 @@ static void print_sys_param(const sys_param_def *par)
cmd_print("device type: %s",par->device_type);
cmd_print("mac addr: %02x.%02x.%02x.%02x.%02x.%02x",
par->mac[0],par->mac[1],par->mac[2],par->mac[3],par->mac[4],par->mac[5]);
- cmd_print("local ip: %d.%d.%d.%d",
- par->local_ip[0],par->local_ip[1],par->local_ip[2],par->local_ip[3]);
- cmd_print("host ip: %d.%d.%d.%d",
- par->host_ip[0],par->host_ip[1],par->host_ip[2],par->host_ip[3]);
- cmd_print("host port: %d",par->host_port);
- cmd_print("local cmd port: %d",par->local_cmd_port);
- cmd_print("host log port: %d",par->host_log_port);
cmd_print("local id: %d",par->local_id);
- cmd_print("host log ip: %d.%d.%d.%d",
- par->host_log_ip[0],par->host_log_ip[1],par->host_log_ip[2],par->host_log_ip[3]);
cmd_print("uart bsp: %d",par->uartbsp);
- cmd_print("coder ret mode: %d",par->coder_ret_mode);
- cmd_print("slave_addr_start: %d",par->slave_addr_start);
- cmd_print("moter_max_count: %d",par->moter_max_count);
}
@@ -211,19 +199,10 @@ commend_export(sysinfo,sysinfo,"print the software info")
static void print_sys_help(void)
{
cmd_print("example for how to set system params:");
- cmd_print("set hostif uart4/utcp");
+ cmd_print("set hostif can/uart1/host");
cmd_print("set devicetype checker/coder");
- cmd_print("set localip 192.168.80.10");
- cmd_print("set hostip 192.168.80.100");
- cmd_print("set hostport 7777");
- cmd_print("set localcmdport 7777");
- cmd_print("set hostlogport 12345");
cmd_print("set localid 1");
- cmd_print("set hostlogip 192.168.80.80");
- cmd_print("set uartbsp 115200");
- cmd_print("set codermode 1/0");
- cmd_print("set slave_addr_start 1/0");
- cmd_print("set moter_max_count 0~30000");
+ cmd_print("set uartbsp 57600");
cmd_print("set save");
}
@@ -271,46 +250,6 @@ static int sys_set(list_def *argv)
memcpy(spar->device_type,str,strlen(str)+1);
cmd_print("device type: %s",spar->device_type);
}
- else if(strcmp(list_get_str(argv,1),"localip")==0)
- {
- char *str=list_get_str(argv,2);
- list_def *ip=str_atod_list(str,'.');
- spar->local_ip[0]=list_get_int(ip,0);
- spar->local_ip[1]=list_get_int(ip,1);
- spar->local_ip[2]=list_get_int(ip,2);
- spar->local_ip[3]=list_get_int(ip,3);
- cmd_print("local ip: %d.%d.%d.%d",
- spar->local_ip[0],spar->local_ip[1],spar->local_ip[2],spar->local_ip[3]);
- }
- else if(strcmp(list_get_str(argv,1),"hostip")==0)
- {
- char *str=list_get_str(argv,2);
- list_def *ip=str_atod_list(str,'.');
- spar->host_ip[0]=list_get_int(ip,0);
- spar->host_ip[1]=list_get_int(ip,1);
- spar->host_ip[2]=list_get_int(ip,2);
- spar->host_ip[3]=list_get_int(ip,3);
- cmd_print("host ip: %d.%d.%d.%d",
- spar->host_ip[0],spar->host_ip[1],spar->host_ip[2],spar->host_ip[3]);
- }
- else if(strcmp(list_get_str(argv,1),"hostport")==0)
- {
- char *str=list_get_str(argv,2);
- spar->host_port=str_atoi(str);
- cmd_print("host port: %d",spar->host_port);
- }
- else if(strcmp(list_get_str(argv,1),"localcmdport")==0)
- {
- char *str=list_get_str(argv,2);
- spar->local_cmd_port=str_atoi(str);
- cmd_print("local cmd port: %d",spar->local_cmd_port);
- }
- else if(strcmp(list_get_str(argv,1),"hostlogport")==0)
- {
- char *str=list_get_str(argv,2);
- spar->host_log_port=str_atoi(str);
- cmd_print("local log port: %d",spar->host_log_port);
- }
else if(strcmp(list_get_str(argv,1),"localid")==0)
{
char *str=list_get_str(argv,2);
@@ -323,35 +262,6 @@ static int sys_set(list_def *argv)
spar->uartbsp=str_atoi(str);
cmd_print("uart bsp: %d",spar->uartbsp);
}
- else if(strcmp(list_get_str(argv,1),"hostlogip")==0)
- {
- char *str=list_get_str(argv,2);
- list_def *ip=str_atod_list(str,'.');
- spar->host_log_ip[0]=list_get_int(ip,0);
- spar->host_log_ip[1]=list_get_int(ip,1);
- spar->host_log_ip[2]=list_get_int(ip,2);
- spar->host_log_ip[3]=list_get_int(ip,3);
- cmd_print("host log ip: %d.%d.%d.%d",
- spar->host_log_ip[0],spar->host_log_ip[1],spar->host_log_ip[2],spar->host_log_ip[3]);
- }
- else if(strcmp(list_get_str(argv,1),"codermode")==0)
- {
- char *str=list_get_str(argv,2);
- spar->coder_ret_mode=str_atoi(str);
- cmd_print("coder ret mode: %d",spar->coder_ret_mode);
- }
- else if(strcmp(list_get_str(argv,1),"slave_addr_start")==0)
- {
- char *str=list_get_str(argv,2);
- spar->slave_addr_start=str_atoi(str);
- cmd_print("slave addr start: %d",spar->slave_addr_start);
- }
- else if(strcmp(list_get_str(argv,1),"moter_max_count")==0)
- {
- char *str=list_get_str(argv,2);
- spar->moter_max_count=str_atoi(str);
- cmd_print("moter_max_count: %d",spar->moter_max_count);
- }
else{
cmd_print("unknown cmd for sysset.");
print_sys_help();
@@ -405,6 +315,10 @@ int main()
uint8_t *rom;
rom_head *head;
rom=flash_get_rom(&head);
+ if(strcmp(head->device_type,"slave")!=0){
+ // 如果不是小板的固件,本次不升级
+ bk_reboot_guide();
+ }
param_init(head);
if(rom)
{
@@ -464,14 +378,9 @@ void param_init(rom_head *h)
memcpy(pars.pack_time,h->pack_time,20);
if(pars.local_id==0xffffffff){
memcpy(pars.host_if,h->host_if,8);
- memcpy(pars.device_type,"checker",8);
+ memcpy(pars.device_type,"slave",8);
mac_init(pars.mac);
- memcpy(pars.local_ip,h->local_ip,4);
- memcpy(pars.host_ip,h->host_ip,4);
- pars.host_port=h->host_port;
- pars.local_cmd_port=7777;
- pars.host_log_port=12345;
- pars.local_id=1;
+ pars.local_id=0;
}
flash_save_param(&pars);
}
@@ -479,16 +388,10 @@ void param_init(rom_head *h)
// 填充默认配置
if(pars.local_id==0xffffffff){
memcpy(pars.pack_time,"initial app",12);
- memcpy(pars.host_if,"uart4",6);
- memcpy(pars.device_type,"coder",6);
+ memcpy(pars.host_if,"host",6);
+ memcpy(pars.device_type,"slave",6);
mac_init(pars.mac);
- memcpy(pars.local_ip,(uint8_t []){192,168,80,10},4);
- memcpy(pars.host_ip,(uint8_t []){192,168,80,80},4);
- memcpy(pars.host_log_ip,(uint8_t []){192,168,80,80},4);
- pars.host_port=9527;
- pars.local_cmd_port=7777;
- pars.host_log_port=12345;
- pars.local_id=1;
+ pars.local_id=0;
flash_save_param(&pars);
}
}
diff --git a/source/mycopy.py b/source/mycopy.py
index 5f27f73..90a78e6 100644
--- a/source/mycopy.py
+++ b/source/mycopy.py
@@ -122,6 +122,7 @@ def creat_head(data:bytearray,date:str):
head+=arr_from_ip("192.168.80.100")
head+=arr_from_int(7777)
head+=arr_from_str("utcp",8)
+ head+=arr_from_str("slave",12)
head+=arr_byte_copy(0,128-len(head))
# print(head)
return head
diff --git a/source/rt_thread/board.c b/source/rt_thread/board.c
index c112833..d311223 100644
--- a/source/rt_thread/board.c
+++ b/source/rt_thread/board.c
@@ -97,9 +97,9 @@ void *dev_get(const char *name)
void param_err_handle(const char *param,const char *file,const char *fun,int line)
{
- bk_reboot_param_err();
// printf("param=%s,file=%s,fun=%s,line=%d.\r\n",param,file,fun,line);
DBG_ERR("param=%s,file=%s,fun=%s,line=%d.\r\n",param,file,fun,line);
+ bk_reboot_param_err();
while(1);
}
diff --git a/source/soft/debug.h b/source/soft/debug.h
index 74d6ab7..4806e02 100644
--- a/source/soft/debug.h
+++ b/source/soft/debug.h
@@ -9,7 +9,7 @@
/*r{ 修改日志打印等级 }c*/
-#define DBG_LOG_LEVEL DBG_LEVEL_INFO
+#define DBG_LOG_LEVEL 0
@@ -48,6 +48,8 @@
#define DBG_LOG_(type_,msg_,...)\
debug_log(__FILE__,__func__,__LINE__,type_,(msg_),##__VA_ARGS__)
+//#define DBG_LOG_(type_,msg_,...)\
+// debug_log("-","-",__LINE__,type_,(msg_),##__VA_ARGS__)
int debug_init(void);
diff --git a/source/soft/mystdlib.c b/source/soft/mystdlib.c
index 6224d60..eba93bf 100644
--- a/source/soft/mystdlib.c
+++ b/source/soft/mystdlib.c
@@ -356,6 +356,8 @@ void *tappend(void *p,void *del)
if(tempptr_find(t,p)==0)
{
ret= tempptr_append(t,p,del);
+ }else{
+ ret=p;
}
}
rt_mutex_release(t->mutex);
diff --git a/source/task/prot_uc.c b/source/task/prot_uc.c
index a2e6f27..8fe75f8 100644
--- a/source/task/prot_uc.c
+++ b/source/task/prot_uc.c
@@ -19,9 +19,11 @@
// 接收buff大小
#define RECV_BUFF_SIZE 300
+// 最大接收信号个数
+#define RECV_SEM_MAX_NUM 10
-
-
+// 接收数据超时时间
+#define RECV_EXPIRE_TIME 100
@@ -87,7 +89,11 @@ static void recv_end_irq(void *t,uint32_t len)
protu_def *p=t;
p->num_to_recv=len;
p->buff_index=len;
- rt_sem_release(p->sem);
+ p->sem_num++;
+ if(p->sem_numsem);
+ p->recv_tick=rt_tick_get();
+ }
}
array_def *protu_decode_str(protu_def *p,array_def *data);
@@ -159,9 +165,21 @@ static void protu_run(void *t)
protu_def *p=t;
array_def *data;
array_def *decode_data;
+ uint32_t tick_now;
while(p->run)
{
rt_sem_take(p->sem,RT_WAITING_FOREVER);
+ p->sem_num=0;
+ if(p->buff_index==0){
+ continue;
+ }
+ tick_now=rt_tick_get();
+ if(tick_now-p->recv_tick>RECV_EXPIRE_TIME){
+ DBG_LOG("recv data expired.");
+ p->num_to_recv=0;
+ p->buff_index=0;
+ continue;
+ }
//DBG_LOG("protu run");
data=arr_creat();
arr_appends(data,p->buff,p->buff_index);
diff --git a/source/task/prot_uc.h b/source/task/prot_uc.h
index 41fc51e..07d87b7 100644
--- a/source/task/prot_uc.h
+++ b/source/task/prot_uc.h
@@ -23,6 +23,8 @@ struct _protu_def{
int buff_index;
int num_to_recv;
void *sem;
+ int sem_num;
+ uint32_t recv_tick;
int run;
char *str_err;
uint16_t cmd_no;
diff --git a/source/task/tran_for_slave.c b/source/task/tran_for_slave.c
index 9bca286..8079ad1 100644
--- a/source/task/tran_for_slave.c
+++ b/source/task/tran_for_slave.c
@@ -19,18 +19,20 @@
typedef struct{
ucport_def u;
rt_timer_t timer;
- array_def *data;
+ int *host_type;// 主机接口类型0串口,1can
}slave_def;
-
-
-static void slave_dolater(ucport_def *u,int delay_ms)
+static slave_def *slave_creat(void)
{
- slave_def *s=(slave_def *)u;
+ slave_def *u=calloc(1,sizeof(slave_def));
+ u->host_type=app_variable("host_if",0,0);
+ return u;
}
+
+
static void slave_del(ucport_def *u)
{
slave_def *s=(slave_def *)u;
@@ -43,13 +45,14 @@ static void slave_del(ucport_def *u)
// 获取检测结果
static int check_result_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
+ slave_def *s=(slave_def *)u;
emit tran_reply_signal(u->p,arr_temp(elec_check_result()));
return 0;
}
static ucport_def *check_result(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=check_result_dolater;
@@ -70,7 +73,7 @@ static int write_hw_version_dolater(ucport_def *u,uint8_t cmd,array_def *data,ch
static ucport_def *write_hw_version(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=write_hw_version_dolater;
@@ -94,7 +97,7 @@ static ucport_def *write_resistor_cbv(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
int value=arr_get(data,0)|(arr_get(data,1)<<8);
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=write_resistor_cbv_dolater;
@@ -115,7 +118,7 @@ static int check_resistor_dolater(ucport_def *u,uint8_t cmd,array_def *data,char
static ucport_def *check_resistor(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=check_resistor_dolater;
@@ -130,15 +133,74 @@ transmit_export(ym_slave,0x05,check_resistor)
// 根据方案检测
+typedef struct{
+ int submit_running;
+ int submit_delay;// 自动上报间隔
+ int submit_times;// 自动上报次数
+ tran_def *tran;
+ uint8_t cmd;
+ int host_type;
+ array_def *data;
+}check_def;
+static check_def g_check;
+static void check_set_data(check_def *u,array_def *data)
+{
+ CHECK_DO(u->data,arr_delete);
+ u->data=arr_duplicate(data);
+}
+static void check_submit_later(void *t)
+{
+ check_def *s=(check_def *)t;
+
+ s->submit_times--;
+ if(s->submit_running&&(s->submit_times>0)){
+ emit tran_send_signal(s->tran,s->cmd,(elec_check_result()));
+ s->submit_delay+=elec_local_addr()*3;
+ later_execute(check_submit_later,s,s->submit_delay);
+ }else{
+ s->submit_running=0;
+ s->submit_times=0;
+ s->cmd=0;
+ }
+}
+static void check_later(void *t)
+{
+ check_def *s=(check_def *)t;
+ elec_check_with_scheme(s->data);
+ if(s->host_type==1)
+ {
+ s->submit_times=10;
+ s->submit_running=1;
+ s->submit_delay=elec_local_addr()*3;
+ later_execute(check_submit_later,s,s->submit_delay);
+ }else{
+ s->cmd=0;
+ }
+}
static int check_with_scheme_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
- emit tran_reply_signal(u->p,arr_temp(elec_check_with_scheme(data)));
+ slave_def *s=(slave_def *)u;
+ check_def *c=&g_check;
+ array_def *r=arr_creat();
+ if(c->cmd==0){
+ c->cmd=cmd;
+ c->tran=s->u.p;
+ c->host_type=*s->host_type;
+ check_set_data(c,data);
+ later_execute(check_later,c,10);
+ }
+ if(c->cmd==cmd){
+ arr_append(r,0);
+ }else{
+ arr_append(r,2);
+ }
+ emit tran_reply_signal(u->p,arr_temp(r));
return 0;
}
static ucport_def *check_with_scheme(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=check_with_scheme_dolater;
@@ -155,6 +217,7 @@ transmit_export(ym_slave,0x0c,check_with_scheme)
// 停止上报
static int stop_submit_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
+ g_check.submit_running=0;
array_def *r=arr_creat();
arr_append(r,0);
emit tran_reply_signal(u->p,arr_temp(r));
@@ -163,7 +226,7 @@ static int stop_submit_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *e
static ucport_def *stop_submit(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=stop_submit_dolater;
@@ -182,11 +245,13 @@ transmit_export(ym_slave,0x14,stop_submit)
// 本程序中程序下载地址不是这个地址,在此用来计算偏移量
#define MCU_APP_ADDR_BASE 0x8004000
#define MCU_TASKID_ADDR_BASE 0x803f000
+#define MCU_JWT_ADDR_BASE 0x803B000
// 定义升级结构体
typedef struct{
uint8_t device_state;
uint32_t flash_addr;
+ uint32_t flash_addr_base;
}updata_def;
static updata_def g_updata;
@@ -203,7 +268,7 @@ static int device_state_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *
static ucport_def *device_state(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=device_state_dolater;
@@ -224,7 +289,7 @@ static int turn_to_bootloader_dolater(ucport_def *u,uint8_t cmd,array_def *data,
static ucport_def *turn_to_bootloader(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=turn_to_bootloader_dolater;
@@ -263,7 +328,7 @@ static int erase_app_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err
static ucport_def *erase_app(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=erase_app_dolater;
@@ -293,7 +358,7 @@ static int write_data_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *er
static ucport_def *write_data(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=write_data_dolater;
@@ -311,21 +376,26 @@ static int ceck_crc_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_
uint32_t addr_start=(arr_get(data,0))|(arr_get(data,1)<<8)|(arr_get(data,2)<<16)|(arr_get(data,3)<<24);
uint32_t addr_end=(arr_get(data,4))|(arr_get(data,5)<<8)|(arr_get(data,6)<<16)|(arr_get(data,7)<<24);
uint32_t crc32=(arr_get(data,8))|(arr_get(data,9)<<8)|(arr_get(data,10)<<16)|(arr_get(data,11)<<24);
+ uint32_t crc32_local=0;
int len=addr_end-addr_start;
- addr_start+=FLASH_FILE_HEAD_SIZE;
- int ret=(crc32!=crc_crc32((uint8_t *)addr_start,len));
+ addr_start=g_updata.flash_addr;
+ crc32_local=crc_crc32((uint8_t *)addr_start,len);
+ int ret=(crc32!=crc32_local);
+ if(ret){
+ DBG_WARN("crc32 not equal,crc=0x%04x,crc_local=0x%04x",crc32,crc32_local);
+ }
array_def *r=arr_creat();
arr_append(r,ret);
emit tran_reply_signal(u->p,arr_temp(r));
if(ret==0){
- later_execute((void (*)(void *))bk_reboot_app,0,100);
+ later_execute((void (*)(void *))bk_reboot_updata,0,100);
}
return 0;
}
static ucport_def *ceck_crc(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=ceck_crc_dolater;
@@ -346,10 +416,18 @@ static int write_data2_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *e
int len=arr_length(data)-4;
int ret=0;
if((addr)==MCU_TASKID_ADDR_BASE){
- flash_erase_scheme();
+ //flash_erase_scheme();
+ // 只擦除两个扇区
+ flash_erase_addr((uint32_t)flash_get_scheme());
+ flash_erase_addr((uint32_t)flash_get_scheme()+2048);
g_updata.flash_addr=creat_file_head((uint32_t)flash_get_scheme(),"scheme.bin");
+ g_updata.flash_addr_base=MCU_TASKID_ADDR_BASE;
+ }else if((addr)==MCU_JWT_ADDR_BASE){
+ flash_erase_jwtcode();
+ g_updata.flash_addr=creat_file_head((uint32_t)flash_get_jwtcode(),"jwtcode.jwt");
+ g_updata.flash_addr_base=MCU_JWT_ADDR_BASE;
}
- uint32_t offset=addr-MCU_TASKID_ADDR_BASE;
+ uint32_t offset=addr-g_updata.flash_addr_base;
addr=g_updata.flash_addr+offset;
ret=flash_write((uint8_t *)addr,&arr_data(data)[4],len);
array_def *r=arr_creat();
@@ -360,7 +438,7 @@ static int write_data2_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *e
static ucport_def *write_data2(tran_def *t, uint8_t cmd,array_def *data)
{
int ret=0;
- slave_def *u=calloc(1,sizeof(slave_def));
+ slave_def *u=slave_creat();
u->u.p=t;
u->u.del=slave_del;
u->u.dolater=write_data2_dolater;
@@ -371,11 +449,48 @@ transmit_export(ym_slave,0x11,write_data2)
-
-
-
-
-
+// 重新加载方案
+static int load_scheme_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
+{
+ int ret=0;
+ array_def *r=arr_creat();
+ arr_append(r,ret);
+ emit tran_reply_signal(u->p,arr_temp(r));
+ ret=elec_scheme_init();
+ return 0;
+}
+static ucport_def *load_scheme(tran_def *t, uint8_t cmd,array_def *data)
+{
+ int ret=0;
+ slave_def *u=slave_creat();
+ u->u.p=t;
+ u->u.del=slave_del;
+ u->u.dolater=load_scheme_dolater;
+ u->u.dolater(&u->u,cmd,data,"ok");
+ return (ucport_def *)u;
+}
+transmit_export(ym_slave,0x15,load_scheme)
+
+
+
+
+// 获取自检参数
+static int bootinfo_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
+{
+ emit tran_reply_signal(u->p,arr_temp(elec_bootinfo()));
+ return 0;
+}
+static ucport_def *bootinfo(tran_def *t, uint8_t cmd,array_def *data)
+{
+ int ret=0;
+ slave_def *u=slave_creat();
+ u->u.p=t;
+ u->u.del=slave_del;
+ u->u.dolater=bootinfo_dolater;
+ u->u.dolater(&u->u,cmd,data,"ok");
+ return (ucport_def *)u;
+}
+transmit_export(ym_slave,0x13,bootinfo)
diff --git a/source/task/transmit.c b/source/task/transmit.c
index 6fb7016..39354b3 100644
--- a/source/task/transmit.c
+++ b/source/task/transmit.c
@@ -305,9 +305,6 @@ static void when_scheme_done(ucport_def *u)
DBG_WARN("can not fond variable \"tran\"");
return;
}
- DBG_LOG("memused:%d",mem_perused());
- rt_thread_mdelay(100);
- DBG_LOG("memused:%d",mem_perused());
}
static ucport_def *tran_scheme(tran_def *t, uint8_t cmd,array_def *data)
{