完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 shanhuohui 于 2014-5-25 11:21 编辑
谁有飞思卡尔BIN转S19软件,网上找到源程序,但不知道怎么弄; 源程序如下: #include #include #include #include #define LINE_BYTES 0x10 #define min(a, b) ((a) < (b) ? (a) : (b)) static unsigned char data_buf[LINE_BYTES]; static char line_buf[64] = { 'S' }; static int str2hex(char *); static void show_help(char *); static int file_conv(FILE *, FILE *, unsigned long, size_t); static int line_conv(size_t *, unsigned long); int main(int argc, char **argv) { int err; FILE *bin, *s19; if (argc < 5) { show_help(argv[0]); return EINVAL; } bin = fopen(argv[1], "rb"); if (!bin) { err = errno; printf("cannot open file %s!n", argv[1]); return err; } s19 = fopen(argv[4], "wb"); if (!s19) { err = errno; printf("cannot open file %s!n", argv[4]); } else { err = file_conv(bin, s19, str2hex(argv[2]), str2hex(argv[3])); fclose(s19); } fclose(bin); return err; } static int str2hex(char *s) { int hex; sscanf(s, "%x", &hex); return hex; } static void show_help(char *app) { printf("Usage:nt%s [bin-file] [offset] [size] [s19-file]n", app); } static int file_conv(FILE *bin, FILE *s19, unsigned long offset, size_t size) { int err; size_t rd_size; do { rd_size = fread(data_buf, 1, min(size, LINE_BYTES), bin); if (!rd_size) break; err = line_conv(&rd_size, offset); size -= rd_size; offset += rd_size; fputs(line_buf, s19); } while (!err); return err; } static int line_conv(size_t *size, unsigned long offset) { int i, err; size_t off_size; unsigned long checksum; char *p; unsigned char *off_buf; err = 0; if (offset + *size < *size) { printf("offset out of range!n"); err = EFBIG; *size = ~offset; if (!*size) return err; } p = line_buf + 1; if (offset + *size > 0x1000000) off_size = 4; else if (offset + *size > 0x10000) off_size = 3; else off_size = 2; checksum = off_size + *size + 1; *p++ = '0' + off_size - 1; p += sprintf(p, "%02X", checksum); off_buf = (unsigned char *)(&offset); for (i = off_size - 1; i >= 0; i--) { p += sprintf(p, "%02X", off_buf); checksum += off_buf; } for (i = 0; i < *size; i++) { p += sprintf(p, "%02X", data_buf); checksum += data_buf; } checksum = ~checksum; p += sprintf(p, "%02X", checksum & 0xff); strcat(p, "rn"); return err; } 好像要用GCC编译什么的, 另外谁能提供个S19进行反汇编的软件啊,。。。。。。。。 QQ:595456785 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
1935个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36428 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4971 浏览 1 评论
6114 浏览 1 评论
6821 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4252 浏览 0 评论
653浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
646浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
647浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
737浏览 2评论
849浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 05:35 , Processed in 1.076127 second(s), Total 51, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号