按照官網(wǎng)說明文件,創(chuàng)建的工程,在下載時(shí)候顯示“錯(cuò)誤的文件”下載失敗,請問什么原因?
您好,這是型號選擇造成的,點(diǎn)“8位單片機(jī)CH55X”,可正常下載
? ? ? ? ? ? ? ? ? ? ? ? ? ?
您好,這是型號選擇造成的,點(diǎn)“8位單片機(jī)CH55X”,可正常下載
? ? ? ? ? ? ? ? ? ? ? ?
型號選擇了8位 CH55X,CH559,下載給的范例程序沒有問題,自己編譯的就下載不進(jìn)去。
文件有多大?用的559?不行的話,把工程或者h(yuǎn)ex文件發(fā)到 lb@wch.cn ?我試試。
? ? ? ? ? ? ? ? ? ? ? ? ? ?
文件有多大?用的559?不行的話,把工程或者h(yuǎn)ex文件發(fā)到 lb@wch.cn ?我試試。
? ? ? ? ? ? ? ? ? ? ? ?
您好,這是我建立的工程,麻煩請看一下是否有錯(cuò)誤。謝謝。
我改了可以,不清楚你怎么試的,建工程和keil的錯(cuò)誤狀態(tài)百度上直接搜索就行,很多的。
? ? ? ? ? ? ? ? ? ? ? ? ? ?
我改了可以,不清楚你怎么試的,建工程和keil的錯(cuò)誤狀態(tài)百度上直接搜索就行,很多的。
? ? ? ? ? ? ? ? ? ? ? ?
請問您修改的哪里?因?yàn)槭裁磳?dǎo)致的錯(cuò)誤?
重復(fù)包含CH559.H的時(shí)候,需要在包含之前加 #define NO_XSFR_DEFINE
我用的是CH552T,同樣的毛病“錯(cuò)誤的文件”,英文版是"Wrong Hex File"。
后來發(fā)現(xiàn)問題出在代碼大小上,如果編譯時(shí)codesize小于1K,那么必然報(bào)這個(gè)錯(cuò)誤。估計(jì)WCHISPTool的作者相信用戶都會(huì)去用printf函數(shù),程序大小不會(huì)小于1K。
? ? ? ? ? ? ? ? ? ? ? ? ? ?
我用的是CH552T,同樣的毛病“錯(cuò)誤的文件”,英文版是"Wrong Hex File"。
后來發(fā)現(xiàn)問題出在代碼大小上,如果編譯時(shí)codesize小于1K,那么必然報(bào)這個(gè)錯(cuò)誤。估計(jì)WCHISPTool的作者相信用戶都會(huì)去用printf函數(shù),程序大小不會(huì)小于1K。
? ? ? ? ? ? ? ? ? ? ? ?
WCHISPTool 2.34 看來改過了,我的是 2.31。你們更新一下下載鏈接吧。
不過我現(xiàn)在換用python版本了,因?yàn)樯a(chǎn)環(huán)境的限制。
ok,官網(wǎng)更新需要點(diǎn)時(shí)間,留個(gè)郵箱給我,我可以私下發(fā)給你
請發(fā)新版的ISP到這個(gè)郵箱 個(gè)人信息保護(hù),已隱藏
? ? ? ? ? ? ? ? ? ? ? ? ? ?
ok,官網(wǎng)更新需要點(diǎn)時(shí)間,留個(gè)郵箱給我,我可以私下發(fā)給你
? ? ? ? ? ? ? ? ? ? ? ?
您好~可以幫忙發(fā)一份最新ISP程序到 個(gè)人信息保護(hù),已隱藏 么?謝謝!
試驗(yàn)了一下,最新版的ISP軟件對不連續(xù)的HEX文件支持還是不好。
比如附件里的程序blink.asm里面有一個(gè)ORG指令,匯編生成的hex文件里第一行是從0開始的,第二行是從100h開始的,軟件就會(huì)報(bào)錯(cuò);然而下載bin文件,軟件就不報(bào)錯(cuò)了。
下面是8051模擬器emu8051(?https://github.com/jarikomppa/emu8051? )中讀hex文件的代碼,能正確處理這個(gè)hex文件,供參考:
int readbyte(FILE * f)
{
? ? char data[3];
? ? data[0] = fgetc(f);
? ? data[1] = fgetc(f);
? ? data[2] = 0;
? ? return strtol(data, NULL, 16);
}
int load_obj(struct em8051 *aCPU, char *aFilename)
{
? ? FILE *f;? ??
? ? if (aFilename == 0 || aFilename[0] == 0)
? ? ? ? return -1;
? ? f = fopen(aFilename, "r");
? ? if (!f) return -1;
? ? if (fgetc(f) != ':')
? ? {
? ? ? fclose(f);
? ? ? ? return -2; // unsupported file format
? ? }
? ? while (!feof(f))
? ? {
? ? ? ? int recordlength;
? ? ? ? int address;
? ? ? ? int recordtype;
? ? ? ? int checksum;
? ? ? ? int i;
? ? ? ? recordlength = readbyte(f);
? ? ? ? address = readbyte(f);
? ? ? ? address <<= 8;
? ? ? ? address |= readbyte(f);
? ? ? ? recordtype = readbyte(f);
? ? ? ? if (recordtype == 1)
? ? ? ? ? ? return 0; // we're done
? ? ? ? if (recordtype != 0)
? ? ? ? ? ? return -3; // unsupported record type
? ? ? ? checksum = recordtype + recordlength + (address & 0xff) + (address >> 8); // final checksum = 1 + not(checksum)
? ? ? ? for (i = 0; i < recordlength; i++)
? ? ? ? {
? ? ? ? ? ? int data = readbyte(f);
? ? ? ? ? ? checksum += data;
? ? ? ? ? ? aCPU->mCodeMem[address + i] = data;
? ? ? ? }
? ? ? ? i = readbyte(f);
? ? ? ? checksum &= 0xff;
? ? ? ? checksum = 256 - checksum;
? ? ? ? if (i != (checksum & 0xff))
? ? ? ? ? ? return -4; // checksum failure
? ? ? ? while (fgetc(f) != ':' && !feof(f)) {} // skip newline? ? ? ??
? ? }
? fclose(f);
? ? return -5;
}