This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28386S:读取文件速度慢

Guru**** 2386600 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1196460/tms320f28386s-readfile-is-slow

器件型号:TMS320F28386S
主题中讨论的其他器件:C2000WARE

我知道这不是一个 Visual C++论坛、但由于 TI 提供了串行闪存编程器、我想也许有人可以提供帮助。 这是函数

从文件加载程序

C:\ti\c2000Ware_4_01_00_00\utilities\flash_programmers\serial_flash_programmer\serial_flash_programmer\source\f021_DownloadKernel.cpp

void loadProgram(FILE *fh)
{
	unsigned char sendData[8];
	unsigned int fileStatus;
	unsigned int rcvData = 0;
	DWORD dwRead;
	DWORD dwWritten;


	getc(fh);
	getc(fh);
	getc(fh);

	fileStatus = fscanf_s(fh, "%x", &sendData[0]);

	float bitRate = 0;
	DWORD millis = GetTickCount();
	while (fileStatus == 1)
	{
		QUIETPRINT(_T("\n%lx"), sendData[0]);
		//Send next char
		WriteFile(file, &sendData[0], 1, &dwWritten, NULL);

		bitRate++;
		dwRead = 0;
		//T1
		while (dwRead == 0)
		{           
            ReadFile(file, &rcvData, 1, &dwRead, NULL);
        }
        //T2
		QUIETPRINT(_T("==%lx"), rcvData);
		//Ensure data matches
		if (sendData[0] != rcvData){
			VERBOSEPRINT(_T("\nData does not match... Please press Ctrl-C to abort."));
			while (1){}
		}

		//Read next char
		fileStatus = fscanf_s(fh, "%x", &sendData[0]);
	}
	millis = GetTickCount() - millis;
	bitRate = bitRate / millis * 1000 * 8;
	QUIETPRINT(_T("\nBit rate /s of transfer was: %f"), bitRate);
	rcvData = 0;
}

波特率为115200、字符被正确回传。 在自由运行中、标记之间的时间为15ms、这太长了。 但是、如果我在 T1暂停程序、然后让它读取、则读取操作需要7ms。 F28386S 立即回显字符,因此延迟似乎是 ReadFile()。

有什么想法吗?

谢谢、

John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 John:

    在每个详细的 print 语句的末尾、是否需要回车符和新的换行符? 我会尝试实现此("\r\n")、器件可能会在解析请求之前等待此组合。

    谢谢、

    查尔斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉、我 的错。 针对速度测试、所有的 QUIETPRINT 和 VERBOSEPRINT 实例被禁用。

    有趣的是、这是3小时前回答的、闪电现在就点亮了。

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍希望提出建议。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 John:

    您是否曾尝试在 函数之外比较此读取文件请求的速度? 在 应用之外、readfile 的速度可能相同。

    谢谢、

    查尔斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您发帖。

    您能不能更明确一点、因为我不理解您的要求? 根据 getTicks()的测量结果,循环的其余部分所需时间不到1ms,小于1ms。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    通过为 Creatfile()创建新句柄并在 COM 端口测试简单的 WriteFile 和 Readfile()交换来测试 Readfile()函数。 如果循环的其余时间少于1ms、我将检查句柄文件是否一切正常。 WriteFile 函数将值写入端口并向文件末尾增加文件指针。 一旦文件指针到达文件末尾、 必须将文件指针重新定位到文件的起始位置才能开始读取。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。

    我想我将尝试2个文件句柄、以便指针能够以更统一的方式移动。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、请告诉我两个文件句柄是否是适当的解决方案。