0 通用固件等多设备多固件下载烧录工具设计
目的:一个设备里有多个芯片,每个芯片为不同平台。为了节约成本,把所有固件放在一个工位一个工具中下载。一个工具可以同时下载多台设备。
1.获取各应用源码接口文档、下载方法、测试固件等
2.把各厂家接口统一封装为console应用,统一接口。
3.通过管道连接所有应用。把串口和路径传给各应用,从控制台获取进度与结果。
4.自动识别串口,vid,pid,mi确定唯一串口,确定ap型号。插入一个显示一个进度。控制台输出的一行,进度++,达到90时进度回到20,只是让进度动起来。支持任意台设备数量,也能独立下载任意固件。
5.下载完成,显示失败或成功。再点下载,下载完成的都重新开始。
使用方法:
1.按目录放好。
2.配置config.ini 中的串口(也能配置为自动串口),路径也可以在界面设置。
3.运行WpfDownloadTool.exe
4.点下载
5.SP上电 AP上电
6.看结果。7.再回到4,循环烧录下一台设备。
1 MFC工程转为console应用
先看效果:CMD带参数运行效果 ,参数为串口号

双击打开效果,不带参数。后面不带黑窗口也能运行,命令行一样有效。
MFC改为命令行交互,双击打开为MFC应用,命令行打开为console应用。
- 使用if (strlen(AfxGetApp()->m_lpCmdLine) > 0) //console mode来区分带不带参数
- 工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入要添加的参数,各参数间用空格分离。
- 同样是换行用 cout << pMsg->content.state << endl;就能触发outputdatareceived事件printf("%s\r\n", temp);就是不行。
示例源码:
#include <iostream>
using namespace std;
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
cout << "ISPGuiApp Start m_lpCmdLine :" << AfxGetApp()->m_lpCmdLine << endl;//输入参数
//可以直接把这当作console里的main
//if (strlen(AfxGetApp()->m_lpCmdLine) > 0) //console mode
//{
// CISPGuiDlg* sd;
// m_pMainWnd = sd = new CISPGuiDlg();
// INT_PTR nResponse = sd->Create(IDD_EMHDETECT_DIALOG); //创建一个非模态对话框,父窗口时主窗口
// sd->ShowWindow(SW_HIDE); //显示非模态对话框
// WINDOWPLACEMENT wp;
// wp.length = sizeof(WINDOWPLACEMENT);
// wp.flags = WPF_RESTORETOMAXIMIZED;
// wp.showCmd = SW_HIDE;
// sd->SetWindowPlacement(&wp); //完全隐藏
// //这里得有死循环 并监听 非模态对话框退出就退出应用
//}
//else
{
CISPGuiDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal(); //模态对话框 在OnInitDialog()中 ShowWindow(SW_MINIMIZE); // 默认最小化
cout <<"ISPGuiApp Exit:" <<nResponse << endl;
}
2 C#改为console应用
- 在项目上点右键->属性->应用程序选项卡->输出类型->控制台应用程序。 (不用改这点更好,双击时启动Windows Form应用,有参数时启动console模式)
- 在设计之初应考虑将显示的代码与其它代码(例如功能、业务逻辑等)相分离。放在不同的程序集中。
- 改变Main函数,加上参数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp3
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
if (args.Length == 0)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
Console.WriteLine(args[0]);
Thread.Sleep(1000);
Console.WriteLine("Hello2");
Thread.Sleep(1000);
Console.WriteLine("success");
}
}
}
}
文章描述了一个设计用于多设备、多固件下载烧录的工具,目标是节省成本并提高效率。该工具通过统一接口封装各厂家应用,支持自动识别串口和设备,并能同时处理多台设备的下载进程。此外,文章还讨论了如何将MFC工程转换为命令行应用以及C#程序在不同模式下的应用切换。
4115

被折叠的 条评论
为什么被折叠?



