MDK 5 固件下载,擦除数据成功,但是 烧录固件(Programming)提示失败。
换了另一个 Project,可以下载成功,说明问题在 Project,而不在 目标板。
经过问题定位,是调用了函数体里面的语句造成 Programming Failed!
的问题:
/**
* @brief 将两位数的十进制数(decimal)转换为 BCD格式。
* @param value: Byte to be converted.
* @retval Converted byte
*/
uint8_t byteToBcd(uint8_t value)
{
uint8_t bcd_high = 0;
while(value >= 10)
{
bcd_high++;
value -= 10; //执行本语句, 会引发 Programming Failed! 的问题
}
return ((uint8_t)(bcd_high << 4) | value);
}
把函数换一种方式实现,再次调用函数就不会 出现 Programming Failed!
的问题:
uint8_t byteToBcd(uint8_t value)
{
uint8_t i = 0;
uint8_t bcd_high = 0;
for(i = 0; i < 10; i++)
{
if(value >= 10)
{
bcd_high++;
value -= 10;
}
else
break;
}
return ((uint8_t)(bcd_high << 4) | value);
}