搜索
bottom↓
回复: 22

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

[复制链接]

出10入284汤圆

发表于 2019-9-29 15:52:27 | 显示全部楼层 |阅读模式
TK499.rar是4.7.3版本的工程模板,其中有我写的工具flash_download.exe,用它就不用每次往U盘复制bin文件了,直接点MDK的download按钮就行了。

flash_download配置

flash_download配置

TK499.rar (1.04 MB)

出0入0汤圆

发表于 2019-9-29 16:06:37 | 显示全部楼层
嗯,等楼主的新板子。先标记下。

出10入284汤圆

 楼主| 发表于 2019-9-29 16:23:15 | 显示全部楼层
lrzxc 发表于 2019-9-29 16:06
嗯,等楼主的新板子。先标记下。

你看错了,我不是版主啊

出0入143汤圆

发表于 2019-9-29 17:05:06 | 显示全部楼层
brother_yan 发表于 2019-9-29 16:23
你看错了,我不是版主啊

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

出10入284汤圆

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

哈哈,多谢!

出0入0汤圆

发表于 2019-9-29 17:56:04 | 显示全部楼层
brother_yan 发表于 2019-9-29 16:23
你看错了,我不是版主啊

嗯,还真看错了

出0入0汤圆

发表于 2019-9-30 00:46:46 | 显示全部楼层
为什么要往U盘复制bin?

出0入0汤圆

发表于 2019-9-30 04:21:40 来自手机 | 显示全部楼层
jjj206 发表于 2019-9-30 00:46
为什么要往U盘复制bin?

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

出0入14汤圆

发表于 2019-9-30 10:16:05 | 显示全部楼层
楼主,如果有多个U盘,会不会拷到其它地方去了

出10入284汤圆

 楼主| 发表于 2019-9-30 10:46:37 来自手机 | 显示全部楼层
应该不会,程序是按卷标搜索磁盘的

出0入0汤圆

发表于 2019-9-30 15:11:33 | 显示全部楼层
标记下啦

出0入143汤圆

发表于 2019-9-30 16:32:52 | 显示全部楼层
brother_yan 发表于 2019-9-30 10:46
应该不会,程序是按卷标搜索磁盘的

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

出10入284汤圆

 楼主| 发表于 2019-9-30 16:50:03 来自手机 | 显示全部楼层
本帖最后由 brother_yan 于 2019-9-30 16:54 编辑
tiky 发表于 2019-9-30 16:32
你按卷标,是搜TK499还是TK499_V2?
如果是搜TK499,那样通用性就高好多,因为接下来还会出更加好用的新 ...


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

出0入143汤圆

发表于 2019-10-6 17:01:29 | 显示全部楼层
楼主,测试的时候发现一个问题,那个“Run Independent”的勾如果没打上,下载大程序有一定的概率不行。猜测可能是程序下载进去了,还没搬运完成,KEIL就急忙注销这个U盘了。打上勾可以解决这个问题,不过就没能在KEIL看到下载完成的字样,只能听到“叮咚”一声才知道下载完。
download.jpg

出10入284汤圆

 楼主| 发表于 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编译的,你们有兴趣可以参考一下~
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <windows.h>
  4. using namespace std;

  5. bool getVolume(char volume_name[], char path[]) // 根据卷名获取盘符
  6. {
  7.   char drivers[1024];
  8.   int len = 0;
  9.   len = GetLogicalDriveStrings(1024, drivers);
  10.   
  11.   for (char *p = drivers; p - drivers < len; p += strlen(p) + 1)
  12.     {
  13.       char volumeName[1024] = {0};
  14.       DWORD volumeSerialNumber = 0;
  15.       DWORD fileSystemFlags = 0; // 文件系统标志
  16.       DWORD maximumComponentLength; // 文件名最大长度
  17.       char fileSystemNameBuffer[1024] = {0}; // 文件系统名称
  18.       
  19.       bool ret = GetVolumeInformation(p, volumeName, 1024, &volumeSerialNumber, &maximumComponentLength, &fileSystemFlags, fileSystemNameBuffer, 1024);
  20.       
  21.       if (ret)
  22.         if (strcmp(volumeName, volume_name) == 0)
  23.           {
  24.             strcpy(path, p);
  25.             return(true);
  26.           }
  27.     }
  28.   
  29.   return(false);
  30. }

  31. void copy(char src[], char dst[]) // 复制文件
  32. {
  33.   static char buf[1024 * 1024];
  34.   int size;
  35.   
  36.   FILE *f1 = fopen(src, "rb");
  37.   FILE *f2 = fopen(dst, "wb");
  38.   size = fread(buf, 1, 1024 * 1024, f1);
  39.   fwrite(buf, 1, size, f2);
  40.   fclose(f1);
  41.   fclose(f2);
  42. }




  43. #define SetColor(x) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(x))
  44. int main(int argc, char *argv[])
  45. {
  46.   if (argc >= 3)
  47.     {
  48.       char path[1024] = "";
  49.       bool r = getVolume(argv[2], path);
  50.       if (r)
  51.         {
  52.           strcat(path, "firmware.bin");
  53.           copy(argv[1], path);
  54.           printf("download complete");
  55.          
  56.           return(1);
  57.         }
  58.       else
  59.         {
  60.           printf("fail to download");
  61.          
  62.           return(0);
  63.         }
  64.     }
  65.   else
  66.     {
  67.       SetColor(0x0C);
  68.       printf("brother_yan 出品\n");
  69.       SetColor(0x0A);
  70.       printf(
  71.       "[ usage ]\n"
  72.       "flash_download *.bin volume_name\n"
  73.       );
  74.       SetColor(0x07);
  75.     }
  76.   
  77.   return(0);
  78. }
复制代码

出0入143汤圆

发表于 2019-10-6 18:03:38 | 显示全部楼层
这个问题不大,好在打个勾也能解决。不过好像还有办法从Bootloader上解决,让它全部完成了才释放U盘,令这个东西更好用。感谢你的支持,我叫工程师再努力一下

出10入284汤圆

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

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

出0入90汤圆

发表于 2019-10-6 18:15:03 | 显示全部楼层
楼主做个MDK5的吧。4的早就不用了。

出10入284汤圆

 楼主| 发表于 2019-10-6 18:20:56 | 显示全部楼层
honami520 发表于 2019-10-6 18:15
楼主做个MDK5的吧。4的早就不用了。

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

出10入284汤圆

 楼主| 发表于 2019-10-6 22:19:12 | 显示全部楼层
v1.1版本(内含源码等): flash_download(v1.1).rar (237.54 KB)

出0入143汤圆

发表于 2019-10-7 12:57:14 | 显示全部楼层
麻烦,兄弟,还是不行,我发现上一个版本也一样,在300多K时很稳定,我测试一个931K的程序,不行的概率就高了。如果是用直接下载的方式就没事。我叫工程师看看能不能解决这个问题

出10入284汤圆

 楼主| 发表于 2019-10-7 14:29:13 来自手机 | 显示全部楼层
tiky 发表于 2019-10-7 12:57
麻烦,兄弟,还是不行,我发现上一个版本也一样,在300多K时很稳定,我测试一个931K的程序,不行的概率就高 ...

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

出0入143汤圆

发表于 2019-10-8 11:38:48 | 显示全部楼层
行行,我看看哪个工程师之前接触过这类的编程
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 19:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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