cmddownload

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>

#define SBL_SUCCESS 0
#define SBL_ERROR 1
#define SBL_ARGUMENT_ERROR 2

uint32_t addressInFlash(uint32_t address, uint32_t size);
void setState(uint32_t errorCode, const char *message, …);
uint32_t sendCmd(uint32_t cmd, char *payload, uint32_t size);
uint32_t getCmdResponse(bool *bSuccess);
void ulToCharArray(uint32_t ul, char *charArray);

uint32_t cmdDownload(uint32_t ui32Address, uint32_t ui32Size) {
uint32_t retCode = SBL_SUCCESS;
bool bSuccess = false;

// Check input arguments
if(!addressInFlash(ui32Address, ui32Size))
{
    setState(SBL_ARGUMENT_ERROR, "Flash download: Address range (0x%08X + %d bytes) is not in device FLASH nor RAM.\n", ui32Address, ui32Size);
    return SBL_ARGUMENT_ERROR;
}
if(ui32Size & 0x03)
{
    setState(SBL_ARGUMENT_ERROR, "Flash download: Byte count must be a multiple of 4\n");
    return SBL_ARGUMENT_ERROR;
}

// Generate payload
// - 4B Program address
// - 4B Program size
char pcPayload[8];
ulToCharArray(ui32Address, &pcPayload[0]);
ulToCharArray(ui32Size, &pcPayload[4]);

// Send command
if((retCode = sendCmd(/*CMD_DOWNLOAD constant*/, pcPayload, 8)) != SBL_SUCCESS)
{
    return retCode;        
}

// Receive command response (ACK/NAK)
if((retCode = getCmdResponse(&bSuccess)) != SBL_SUCCESS)
{
    return retCode;
}

// Return command response
return (bSuccess) ? SBL_SUCCESS : SBL_ERROR;

}
解释:
我们首先引入了必要的头文件来定义数据类型如uint32_t和bool。
将原来的类成员函数SblDeviceCC2650::cmdDownload更改为普通C函数cmdDownload。
我们去除了C++类特定的函数调用,如setState和sendCmd,而是直接调用了普通C函数(你需要提供这些函数的C语言版本实现)。
ulToCharArray 函数用来将uint32_t整数转换为字符数组,这个函数也应该以C语言方式实现。
注意,在C语言中,我们使用宏定义来定义常量,如 SBL_SUCCESS 和 SBL_ERROR。
在C语言中,我们使用bool数据类型来表示布尔值,并用true和false来表示真和假,这需要#include <stdbool.h>头文件。
请注意,这个C语言版本的代码需要你提供其他函数的C语言实现,如addressInFlash、setState、sendCmd、getCmdResponse和ulToCharArray。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值