brother_yan 发表于 2019-9-29 15:52:27

发一个MDK 4.7.3版本的工程模板及简便下载工具

TK499.rar是4.7.3版本的工程模板,其中有我写的工具flash_download.exe,用它就不用每次往U盘复制bin文件了,直接点MDK的download按钮就行了。


flash_download_cmd.exe和flash_download.exe唯一不同的是它会显示命令行窗口,可以写个批处理批量下载程序,不用每次都往U盘复制bin文件了。


lrzxc 发表于 2019-9-29 16:06:37

嗯,等楼主的新板子。先标记下。

brother_yan 发表于 2019-9-29 16:23:15

lrzxc 发表于 2019-9-29 16:06
嗯,等楼主的新板子。先标记下。

你看错了,我不是版主啊

tiky 发表于 2019-9-29 17:05:06

brother_yan 发表于 2019-9-29 16:23
你看错了,我不是版主啊

感谢楼主的热心支持,什么时候来买东西,得叫客服给你多多优惠一下才行

brother_yan 发表于 2019-9-29 17:39:02

tiky 发表于 2019-9-29 17:05
感谢楼主的热心支持,什么时候来买东西,得叫客服给你多多优惠一下才行 ...

哈哈,多谢!

lrzxc 发表于 2019-9-29 17:56:04

brother_yan 发表于 2019-9-29 16:23
你看错了,我不是版主啊

嗯,还真看错了

jjj206 发表于 2019-9-30 00:46:46

为什么要往U盘复制bin?

Semiconductor 发表于 2019-9-30 04:21:40

jjj206 发表于 2019-9-30 00:46
为什么要往U盘复制bin?

可能它的下载方式,就是往虚拟U盘里拷贝bin文件。

lordor 发表于 2019-9-30 10:16:05

楼主,如果有多个U盘,会不会拷到其它地方去了

brother_yan 发表于 2019-9-30 10:46:37

应该不会,程序是按卷标搜索磁盘的

tigerman520 发表于 2019-9-30 15:11:33

标记下啦

tiky 发表于 2019-9-30 16:32:52

brother_yan 发表于 2019-9-30 10:46
应该不会,程序是按卷标搜索磁盘的

你按卷标,是搜TK499还是TK499_V2?
如果是搜TK499,那样通用性就高好多,因为接下来还会出更加好用的新版本

brother_yan 发表于 2019-9-30 16:50:03

本帖最后由 brother_yan 于 2019-9-30 16:54 编辑

tiky 发表于 2019-9-30 16:32
你按卷标,是搜TK499还是TK499_V2?
如果是搜TK499,那样通用性就高好多,因为接下来还会出更加好用的新 ...

这个可以改,在第一张图的MDK设置里第二行那个参数,第二张图的命令行方式也是手动输卷标的
但是不支持通配符,不能模糊搜索。。。
有时间我改个支持通配符的

tiky 发表于 2019-10-6 17:01:29

楼主,测试的时候发现一个问题,那个“Run Independent”的勾如果没打上,下载大程序有一定的概率不行。猜测可能是程序下载进去了,还没搬运完成,KEIL就急忙注销这个U盘了。打上勾可以解决这个问题,不过就没能在KEIL看到下载完成的字样,只能听到“叮咚”一声才知道下载完。

brother_yan 发表于 2019-10-6 17:57:13

本帖最后由 brother_yan 于 2019-10-6 18:00 编辑

tiky 发表于 2019-10-6 17:01
楼主,测试的时候发现一个问题,那个“Run Independent”的勾如果没打上,下载大程序有一定的概率不行。猜 ...

这个问题我也不太清楚原因。我发现把*.bin复制到U盘后U盘会自动弹出,我不清楚bootloader是如何判断的。下面是我的源码,exe文件是Dev-C++ 4.9.9.2编译的,你们有兴趣可以参考一下~
#include <stdio.h>
#include <iostream>
#include <windows.h>
using namespace std;

bool getVolume(char volume_name[], char path[]) // 根据卷名获取盘符
{
char drivers;
int len = 0;
len = GetLogicalDriveStrings(1024, drivers);

for (char *p = drivers; p - drivers < len; p += strlen(p) + 1)
    {
      char volumeName = {0};
      DWORD volumeSerialNumber = 0;
      DWORD fileSystemFlags = 0; // 文件系统标志
      DWORD maximumComponentLength; // 文件名最大长度
      char fileSystemNameBuffer = {0}; // 文件系统名称
      
      bool ret = GetVolumeInformation(p, volumeName, 1024, &volumeSerialNumber, &maximumComponentLength, &fileSystemFlags, fileSystemNameBuffer, 1024);
      
      if (ret)
      if (strcmp(volumeName, volume_name) == 0)
          {
            strcpy(path, p);
            return(true);
          }
    }

return(false);
}

void copy(char src[], char dst[]) // 复制文件
{
static char buf;
int size;

FILE *f1 = fopen(src, "rb");
FILE *f2 = fopen(dst, "wb");
size = fread(buf, 1, 1024 * 1024, f1);
fwrite(buf, 1, size, f2);
fclose(f1);
fclose(f2);
}




#define SetColor(x) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(x))
int main(int argc, char *argv[])
{
if (argc >= 3)
    {
      char path = "";
      bool r = getVolume(argv, path);
      if (r)
      {
          strcat(path, "firmware.bin");
          copy(argv, path);
          printf("download complete");
         
          return(1);
      }
      else
      {
          printf("fail to download");
         
          return(0);
      }
    }
else
    {
      SetColor(0x0C);
      printf("brother_yan 出品\n");
      SetColor(0x0A);
      printf(
      "[ usage ]\n"
      "flash_download *.bin volume_name\n"
      );
      SetColor(0x07);
    }

return(0);
}

tiky 发表于 2019-10-6 18:03:38

这个问题不大,好在打个勾也能解决。不过好像还有办法从Bootloader上解决,让它全部完成了才释放U盘,令这个东西更好用。感谢你的支持,我叫工程师再努力一下

brother_yan 发表于 2019-10-6 18:10:26

tiky 发表于 2019-10-6 18:03
这个问题不大,好在打个勾也能解决。不过好像还有办法从Bootloader上解决,让它全部完成了才释放U盘,令这 ...

我刚扫了一眼发现copy()函数最大只支持1M bytes。。。低级错误,写C一直习惯节省内存,结果挖了个坑。。。

honami520 发表于 2019-10-6 18:15:03

楼主做个MDK5的吧。4的早就不用了。

brother_yan 发表于 2019-10-6 18:20:56

honami520 发表于 2019-10-6 18:15
楼主做个MDK5的吧。4的早就不用了。

MDK5的官方有了,我还做干啥呢。至于为啥用4,因为我没找到满意的keygen...

brother_yan 发表于 2019-10-6 22:19:12

v1.1版本(内含源码等):

欢迎测试~

tiky 发表于 2019-10-7 12:57:14

麻烦,兄弟,还是不行,我发现上一个版本也一样,在300多K时很稳定,我测试一个931K的程序,不行的概率就高了。如果是用直接下载的方式就没事。我叫工程师看看能不能解决这个问题

brother_yan 发表于 2019-10-7 14:29:13

tiky 发表于 2019-10-7 12:57
麻烦,兄弟,还是不行,我发现上一个版本也一样,在300多K时很稳定,我测试一个931K的程序,不行的概率就高 ...

不行的话有没有出错信息,还是显示成功但是实际不成功?可能需要改fwrite的缓冲区,因为我发现分块复制数据时会出错,我不知道bootloader是怎样判断.bin复制完成的。或者命令行方式下载有没有问题。我的代码很简单,极有可能考虑不全面,看你们工程师能不能完善一下或者干脆重写一个

tiky 发表于 2019-10-8 11:38:48

行行,我看看哪个工程师之前接触过这类的编程
页: [1]
查看完整版本: 发一个MDK 4.7.3版本的工程模板及简便下载工具