前言:
玩stm32陆陆续续也有1年半了,从51到linux驱动到stm32发现了不少好玩的东西,应了大家的要求开通了博客,记录一些在stm32上。
做产品的同学可能已经发现,产品正式出厂后是很少允许拆壳的,但是产品结构上也不会预留串口调试的接口。那么现场环境复杂,如果复现了,是否有办法判断程序跑到什么地方呢?
应用场景:
通过Putty-Tlenet工具,输入带网络设备IP,可将设备打印信息传输到电脑终端。
前提
笔者是通过stm32f407+lwip 完成,移植lwip后属于纯应用
正文
上电启动后,对各个驱动 init 。 late init 后需要创建 TCP的服务端(port:23 , 当然可根据个人喜好修改)
#define TELNET_FIRST_PRINT "/***************************************************************\r\n"\
" *@ Company : Vicon technology company\r\n"\
" *@ Author : Doon\r\n"\
" *@ version : 28-August-2018\r\n"\
" *@ position : APP\r\n"\
" *@ Description : You may obtain a copy of the License at : \r\n"\
" *@ \t\t http://www.vicon-iot.com \r\n"\
"****************************************************************/\r\n"
struct tcp_server_struct
{
u8 state;
char Usr_name[50];
char Usr_password[50];
u8 Verf_flag;
u8 Verf_count;
struct tcp_pcb *pcb;
struct pbuf *p;
};
err_t Telnet_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
err_t ret_err;
unsigned int data_len = 0;
struct pbuf *q;
struct tcp_server_struct *es;
es = (struct tcp_server_struct *)arg;
MyOS_Node_Def item;
if(p == NULL)
{
ret_err = ERR_OK;
tcp_server_connection_close(pcb,es);
/*item.Event_Type = OS_EVENT_TELNET_CONNECTED;
item.data.connected.connected_status = OS_CONN_CLOSE;
Enqueue(item);*/
Dbg("Telnet Disconnect");
}
else if(err != ERR_OK)
{
if(p)
{
pbuf_free(p);
}
ret_err = err;
Dbg("err == %d",err);
}
if(p != NULL)
{
memset(Telnet_Recv_Buff,0,TELNET_RECV_BUFF_SIZE);
for(q=p;q!=