找回密码
 立即注册
查看: 1661|回复: 4

第三方应用程序调用STC发布项目程序对单片机进行ISP下载

[复制链接]
  • TA的每日心情
    难过
    15 小时前
  • 签到天数: 153 天

    [LV.7]常住居民III

    140

    主题

    191

    回帖

    1646

    积分

    金牌会员

    积分
    1646
    发表于 2023-4-26 14:08:57 | 显示全部楼层 |阅读模式
    第三方应用程序调用STC发布项目程序对单片机进行ISP下载, 可以吗
    4045JRRYD(1CAV9RHN)JONT.png
    我的设备有一套自己的上位机软件,我是想程序升级直接用我的上位机完成升级,
    不需要再让我司的用户再去打开另外一个,STC帮我们发布的虽然也是我们用户自己界面的软件去升级,
    如果发布项目程序能内嵌到我们用户的专有的上位机进行升级,我们用户就会更方便了


    点评

    可以  发表于 2023-4-26 16:02
    回复 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9326

    回帖

    1万

    积分

    管理员

    积分
    13914
    发表于 2023-4-26 16:01:39 | 显示全部楼层
    可以

    1.png

    附录Q      使用第三方应用程序调用STC发布项目程序对单片机进行ISP下载
    使用STC的ISP下载软件生成的发布项目程序为可执行的EXE格式文件,用户可直接双击发布的项目程序运行进行ISP下载,也可在第三方的应用程序中调用发布项目程序进行ISP下载。下面介绍两种调用的方法。
    简单调用
    在第三方应用程序中只是简单创建发布项目程序的进程,其他的所有下载操作均在发布项目程序中进行,第三方应用程序此时只需要等待发布项目程序操作完成后,清理现场即可。
    VC代码

    BOOL IspProcess()
    {
             //定义相关变量
             STARTUPINFO si;
             PROCESS_INFORMATIONpi;
             CString path;
             //发布项目程序的完整路径
             path =_T("D:\\Work\\Upgrade.exe");
             //变量初始化
             memset(&si, 0,sizeof(STARTUPINFO));
             memset(&pi, 0,sizeof(PROCESS_INFORMATION));
             //设置启动变量
             si.cb =sizeof(STARTUPINFO);
             GetStartupInfo(&si);
             si.wShowWindow =SW_SHOWNORMAL;
             si.dwFlags =STARTF_USESHOWWINDOW;
             //创建发布项目程序进程
             if(CreateProcess(NULL, (LPTSTR)(LPCTSTR)path, NULL, NULL, FALSE, 0, NULL, NULL,&si, &pi))
             {
                      //等待发布项目程序操作完成
                      //由于此处会阻塞主进程,所以建议新建工作进程,在工作进程中进行等待
                      WaitForSingleObject(pi.hProcess,INFINITE);
                      //清理工作
                      CloseHandle(pi.hThread);
                      CloseHandle(pi.hProcess);
                       returnTRUE;
             }
             else
             {
                      AfxMessageBox(_T("创建进程失败 !"));
                       returnFALSE;
             }
    }


    高级调用
    在第三方应用程序创建发布项目程序的进程,并在第三方应用程序中进行包括选择串口、开始ISP编程、停振ISP编程以及关闭发布项目程序等的全部ISP下载操作,而不需要在发布项目程序中进行界面互动。
    VC代码

    //定义回调函数参数的数据结构
    struct CALLBACK_PARAM
    {
             DWORDdwProcessId;                                                                //主进程ID
             HWNDhMainWnd;                                                                     //主窗口句柄
    };
    //枚举窗口的回调函数,用于获取主窗口句柄
    BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam)
    {
             CALLBACK_PARAM *pcp =(CALLBACK_PARAM *)lParam;
             DWORD id;
             GetWindowThreadProcessId(hWnd,&id);
             if((pcp->dwProcessId == id) && (GetParent(hWnd) == NULL))
             {
                       pcp->hMainWnd= hWnd;
                       returnFALSE;
             }
             return TRUE;
    }
    BOOL IspProcess()
    {
             //定义相关变量
             STARTUPINFO si;
             PROCESS_INFORMATIONpi;
             CALLBACK_PARAM cp;
             CString path;
             //发布项目程序中部分控件的ID
             constUINT ID_PROGRAM                  = 1013;
             constUINT ID_STOP                   = 1012;
             constUINT ID_COMPORT         = 1001;
             constUINT ID_PROGRESS        = 1000;
             //发布项目程序的完整路径
             path =_T("D:\\Work\\Upgrade.exe");
             //变量初始化
             memset(&si, 0,sizeof(STARTUPINFO));
             memset(&pi, 0,sizeof(PROCESS_INFORMATION));
             memset(&cp, 0,sizeof(CALLBACK_PARAM));
             //设置启动变量
             si.cb =sizeof(STARTUPINFO);
             GetStartupInfo(&si);
             si.wShowWindow= SW_SHOWNORMAL;                               //此处若设置为SW_HIDE,就不会显示发布项目程序
    //的操作界面,所有的ISP操作都可在后台进行
             si.dwFlags =STARTF_USESHOWWINDOW;
             //创建发布项目程序进程
             if(CreateProcess(NULL, (LPTSTR)(LPCTSTR)path, NULL, NULL, FALSE, 0, NULL, NULL,&si, &pi))
             {
                      //等待发布项目程序进程初始化完成
                       WaitForInputIdle(pi.hProcess,5000);
                      //获取发布项目程序的主窗口句柄
                       cp.dwProcessId= pi.dwProcessId;
                       cp.hMainWnd= NULL;
                       EnumWindows(EnumWindowCallBack,(LPARAM)&cp);
                       if(cp.hMainWnd != NULL)
                       {
                                HWNDhProgram;
                                HWNDhStop;
                                HWNDhPort;
                                //获取发布项目程序主窗口中部分控件句柄
                                hProgram= ::GetDlgItem(cp.hMainWnd, ID_PROGRAM);
                                hStop= ::GetDlgItem(cp.hMainWnd, ID_STOP);
                                hPort= ::GetDlgItem(cp.hMainWnd, ID_COMPORT);
                                //设置发布项目程序中的串口号, 3个参数为0:COM1, 1:COM2, 2:COM3, ...
                                ::SendMessage(hPort,CB_SETCURSEL, 0, 0);
                                //触发编程按钮开始ISP编程
                                ::SendMessage(hProgram,BM_CLICK, 0, 0);
                                //等待编程完成,
                               //由于此处会阻塞主进程,所以建议新建工作进程,在工作进程中进行等待
                                while(!::IsWindowEnabled(hProgram));
                                //编程完成后关闭发布项目程序
                                ::SendMessage(cp.hMainWnd,WM_CLOSE, 0, 0);
                       }
                      //等待进程结束
                       WaitForSingleObject(pi.hProcess,INFINITE);
                      //清理工作
                       CloseHandle(pi.hThread);
                       CloseHandle(pi.hProcess);
                       returnTRUE;
             }
             else
             {
                       AfxMessageBox(_T("创建进程失败 !"));
                       returnFALSE;
             }
    }







    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6775

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6775
    QQ
    发表于 2023-4-26 16:14:28 | 显示全部楼层
    就是典型的不看手册
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    半小时前
  • 签到天数: 98 天

    [LV.6]常住居民II

    9

    主题

    557

    回帖

    823

    积分

    高级会员

    积分
    823
    发表于 2024-1-27 08:33:31 | 显示全部楼层
    国芯如果能发布一款支持命令行的ISP升级程序就好了,选择串口、波特率、HEX文件以及其他选项都通过命令行参数或者ini配置文件进行。这样第三方应用程序调用的通用性就大大加强、简化了。
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-5 22:03 , Processed in 0.075983 second(s), 46 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表