mirror of https://github.com/rusefi/openblt.git
Refs #520. Updated BootCommander to perform erase operation in steps of 32kb.
git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@481 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
parent
e4acfbce62
commit
eab505d95c
|
@ -38,7 +38,7 @@ PROJECT_NAME = "BootCommander - Reference Manual"
|
||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = 1.3.0
|
PROJECT_NUMBER = 1.4.0
|
||||||
|
|
||||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
|
|
|
@ -298,12 +298,51 @@ int main(int argc, char const * const argv[])
|
||||||
if ((segmentData != NULL) && (segmentLen > 0)) /*lint !e774 */
|
if ((segmentData != NULL) && (segmentLen > 0)) /*lint !e774 */
|
||||||
{
|
{
|
||||||
/* Perform erase operation. */
|
/* Perform erase operation. */
|
||||||
printf("Erasing %u bytes starting at 0x%08x...", segmentLen, segmentBase);
|
printf("Erasing %u bytes starting at 0x%08x...%s", segmentLen, segmentBase,
|
||||||
|
GetLineTrailerByPercentage(0));
|
||||||
(void)fflush(stdout);
|
(void)fflush(stdout);
|
||||||
if (BltSessionClearMemory(segmentBase, segmentLen) != BLT_RESULT_OK)
|
/* Perform erase operation in chunks, so that a progress update can be shown
|
||||||
|
* and no erase timeout occurs due to erasing too big of a memory range.
|
||||||
|
*/
|
||||||
|
uint32_t const eraseChunkSize = 32768;
|
||||||
|
uint32_t currentEraseCnt;
|
||||||
|
uint32_t currentEraseBase;
|
||||||
|
uint32_t currentEraseResult;
|
||||||
|
uint32_t stillToEraseCnt;
|
||||||
|
|
||||||
|
stillToEraseCnt = segmentLen;
|
||||||
|
currentEraseBase = segmentBase;
|
||||||
|
while (stillToEraseCnt > 0)
|
||||||
{
|
{
|
||||||
/* Set error code. */
|
/* Determine chunk size. */
|
||||||
result = RESULT_ERROR_MEMORY_ERASE;
|
if (stillToEraseCnt >= eraseChunkSize)
|
||||||
|
{
|
||||||
|
currentEraseCnt = eraseChunkSize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentEraseCnt = stillToEraseCnt;
|
||||||
|
}
|
||||||
|
/* Erase the next chunk from the target's memory. */
|
||||||
|
currentEraseResult = BltSessionClearMemory(currentEraseBase, currentEraseCnt);
|
||||||
|
if (currentEraseResult != BLT_RESULT_OK)
|
||||||
|
{
|
||||||
|
/* Set error code. */
|
||||||
|
result = RESULT_ERROR_MEMORY_ERASE;
|
||||||
|
/* Error detected so abort erase operation. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* Update loop variables. */
|
||||||
|
currentEraseBase += currentEraseCnt;
|
||||||
|
stillToEraseCnt -= currentEraseCnt;
|
||||||
|
/* Display progress. */
|
||||||
|
uint8_t progressPct;
|
||||||
|
|
||||||
|
/* First backspace the old percentage trailer. */
|
||||||
|
ErasePercentageTrailer();
|
||||||
|
/* Now add the new percentage trailer. */
|
||||||
|
progressPct = (uint8_t)(((segmentLen - stillToEraseCnt) * 100ul) / segmentLen);
|
||||||
|
printf("%s", GetLineTrailerByPercentage(progressPct)); (void)fflush(stdout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -311,6 +350,7 @@ int main(int argc, char const * const argv[])
|
||||||
/* Set error code because sanity check failed. */
|
/* Set error code because sanity check failed. */
|
||||||
result = RESULT_ERROR_MEMORY_ERASE;
|
result = RESULT_ERROR_MEMORY_ERASE;
|
||||||
}
|
}
|
||||||
|
ErasePercentageTrailer();
|
||||||
printf("%s\n", GetLineTrailerByResult((bool)(result != RESULT_OK)));
|
printf("%s\n", GetLineTrailerByResult((bool)(result != RESULT_OK)));
|
||||||
/* Do not continue loop if an error was detected. */
|
/* Do not continue loop if an error was detected. */
|
||||||
if (result != RESULT_OK)
|
if (result != RESULT_OK)
|
||||||
|
@ -431,7 +471,7 @@ int main(int argc, char const * const argv[])
|
||||||
static void DisplayProgramInfo(void)
|
static void DisplayProgramInfo(void)
|
||||||
{
|
{
|
||||||
printf("--------------------------------------------------------------------------\n");
|
printf("--------------------------------------------------------------------------\n");
|
||||||
printf("BootCommander version 1.03. Performs firmware updates on a microcontroller\n");
|
printf("BootCommander version 1.04. Performs firmware updates on a microcontroller\n");
|
||||||
printf("based system that runs the OpenBLT bootloader.\n\n");
|
printf("based system that runs the OpenBLT bootloader.\n\n");
|
||||||
printf("Copyright (c) 2017 by Feaser http://www.feaser.com\n");
|
printf("Copyright (c) 2017 by Feaser http://www.feaser.com\n");
|
||||||
printf("-------------------------------------------------------------------------\n");
|
printf("-------------------------------------------------------------------------\n");
|
||||||
|
|
Loading…
Reference in New Issue