feat(ota): 实现安全OTA更新协议支持AES加密和CRC校验

- 添加AES128加密解密功能支持安全固件传输
- 实现基于随机数握手的安全会话密钥协商机制
- 集成CRC32带密钥校验确保数据完整性
- 重构OTA状态机支持握手、数据传输和验证流程
- 添加CANFD数据长度规范处理和安全跳转逻辑
- 移除调试打印语句优化性能

refactor(can): 优化CANFD发送和OTA确认处理逻辑

- 重构CANFD_AsyncSend函数支持规范数据长度
- 重命名sendACK为sendDATA_ACK并添加重载函数
- 修复数据长度处理和缓冲区填充逻辑
- 优化CAN消息发送的数据复制和验证流程
- 移除未使用的联合体类型定义

chore(project): 添加AES加密模块和系统初始化配置

- 在项目配置中添加AES128加密解密文件
- 在main.cpp中初始化CRC外设模块
- 添加安全十六进制打印调试函数
- 集成AES加密库到OTA处理流程中
- 优化系统时钟初始化配置
This commit is contained in:
cbb
2026-01-01 01:39:19 +08:00
parent a25ec5f029
commit 9c7145ef99
28 changed files with 2470 additions and 1040 deletions
+82
View File
@@ -0,0 +1,82 @@
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf
# Clangd
.clangd
# uv2csolution generated log file
uv2csolution.log
# CMSIS Solution files and folders not to be tracked
# default directory of build artifacts
**/out
# directory containing intermediate files to be regenerated
**/tmp
# Update config files must be merged before commit
*.update@*
# cbuild output files
*.cbuild.yml
*.cbuild-idx.yml
*.cbuild-run.yml
*.cbuild-set.yml
# .vscode JSON and debug adapter files generated by CMSIS Solution
.vscode/launch.json
.vscode/tasks.json
.vscode/settings.json
.cmd.jlink
# legacy intermediate project file
*.cprj
+2
View File
@@ -4,6 +4,8 @@ project:
files:
- file: main.h
- file: main.cpp
- file: sys/aes128.h
- file: sys/aes128.cpp
- group: sys
files:
- file: sys/systick.cpp
+51 -19
View File
@@ -209,15 +209,14 @@ void CAN_transmiter::communication_check() {
// CAN0 接收数据标志
if (SET == can0_receive_flag) {
printf("\r\n can0 %X receive data:", receive_message.rx_efid);
for (int i = 0; i < receive_message.rx_dlen; i++) {
printf(" %02x", receive_message.rx_data[i]);
}
if (receive_message.rx_efid == CANFD_OTA_DATA_ID) {
ota.handleOTAMessage(receive_message.rx_efid,
receive_message.rx_data,
receive_message.rx_dlen);
} else if (receive_message.rx_efid == CANFD_OTA_REQ_ID) {
// printf("can0 %X receive data,length%d:", receive_message.rx_efid,
// receive_message.rx_dlen);
// for (int i = 0; i < receive_message.rx_dlen; i++) {
// printf(" 0x%02x", receive_message.rx_data[i]);
// }
// printf("\n");
if (receive_message.rx_efid == CANFD_OTA_DATA_ID or
receive_message.rx_efid == CANFD_OTA_REQ_ID) {
ota.handleOTAMessage(receive_message.rx_efid,
receive_message.rx_data,
receive_message.rx_dlen);
@@ -228,11 +227,25 @@ void CAN_transmiter::communication_check() {
}
}
u8 CAN_transmiter::sendACK(u32 CANFD_OTA_ACK_ID, u32 packet_num) {
u32_union_t pack_data;
pack_data.u = packet_num;
u8 CAN_transmiter::sendDATA_ACK(u32 packet_num, u8 *data) { // 握手的时候
memset(transmit_data, 0, sizeof(transmit_data));
transmit_data[0] = 0xBA;
transmit_data[1] = 0xC0;
// 修复原始代码中不完整的循环
for (int i = 2; i < 6; i++) {
transmit_data[i] = data[i-2];
}
return CANFD_AsyncSend(CANFD_OTA_ACK_ID, 6, transmit_data);
}
u8 CAN_transmiter::sendDATA_ACK(u32 packet_num,
bool if_success) { // 发送数据的时候
memset(transmit_data, 0, 4);
pack_u32_to_bytes(transmit_data, 0, pack_data);
if (if_success) {
transmit_data[0] = 0x01;
transmit_data[1] = 0x00;
}
return CANFD_AsyncSend(CANFD_OTA_ACK_ID, 4, transmit_data);
}
@@ -312,6 +325,7 @@ void DMA0_Channel5_IRQHandler(void) {
* @param data CAN消息数据
*/
u8 CAN_transmiter::CANFD_AsyncSend(u32 id, u8 length, u8 *data) {
u8 valid_length = length;
// 检查CANFD模式是否启用
if (!(CAN_CTL(CAN0) & CAN_CTL_DFZ)) {
printf("CANFD mode not enabled\r\n");
@@ -321,30 +335,48 @@ u8 CAN_transmiter::CANFD_AsyncSend(u32 id, u8 length, u8 *data) {
// 检查数据指针是否有效
if (data == nullptr) {
printf("Invalid data pointer\r\n");
return 0;
}
// 检查数据长度是否符合CANFD规范
if (length > 64) {
printf("CANFD data length exceeds maximum of 64 bytes\r\n");
if (length > 8) {
if (length > 8 and length < 13) {
valid_length = 12;
} else if (length > 12 and length < 17) {
valid_length = 16;
} else if (length > 16 and length < 21) {
valid_length = 20;
} else if (length > 20 and length < 24) {
valid_length = 24;
} else if (length > 28 and length < 33) {
valid_length = 32;
} else if (length > 32 and length < 49) {
valid_length = 48;
} else if (length > 48 and length < 65) {
valid_length = 64;
} else {
printf("CANFD data length error\r\n");
return 0;
}
}
/* 配置发送消息参数 */
transmit_message.tx_ft = CAN_FT_DATA; // 数据帧
transmit_message.tx_ff = CAN_FF_EXTENDED; // 扩展帧格式
transmit_message.tx_efid = id; // 扩展帧ID
transmit_message.tx_dlen = length; // 设置数据长度
transmit_message.tx_dlen = valid_length; // 设置数据长度
// 设置CANFD特定参数
transmit_message.fd_flag = CAN_FDF_FDFRAME; // CANFD帧格式
transmit_message.fd_brs = ENABLE; // 使能比特率切换
transmit_message.fd_esi = DISABLE; // 错误状态指示
// 复制数据到发送缓冲区
for (int i = 0; i < length && i < 64; i++) {
for (int i = 0; i < valid_length; i++) {
if (i < length) {
transmit_message.tx_data[i] = *(data + i);
} else {
transmit_message.tx_data[i] = 0;
}
}
// 自动选择空闲mailbox发送消息
+4 -15
View File
@@ -9,12 +9,9 @@ extern "C" {
#include "gd32c10x_can.h"
#include "stdint.h"
#include <stdio.h>
#include "sys/config.h"
// 定义一个联合体类型用于float和byte数组之间的转换
typedef union {
u32 u;
u8 b[4];
} u32_union_t;
// 添加辅助函数用于将u16类型数据打包到u8数组中
static inline void pack_u16_to_bytes(u8 *buffer, u16 offset, u16 value) {
@@ -43,15 +40,6 @@ static inline u16 unpack_bytes_to_u16(u8 *buffer, u16 offset) {
return value;
}
// 添加辅助函数用于从u8数组中解包float类型数据
static inline u32_union_t unpack_bytes_to_float(u8 *buffer, u16 offset) {
u32_union_t u32_union;
u32_union.b[0] = buffer[offset];
u32_union.b[1] = buffer[offset + 1];
u32_union.b[2] = buffer[offset + 2];
u32_union.b[3] = buffer[offset + 3];
return u32_union;
}
u8 can_gpio_init(void); // CAN引脚初始化
void canfd_config(void); // CANFD初始化
@@ -80,7 +68,8 @@ class CAN_transmiter {
void communication_check(); // 通信检查
u8 CANFD_AsyncSend(u32 ID, u8 length, u8 *data); // CANFD异步发送(使用DMA)
u8 sendACK(u32 CANFD_OTA_ACK_ID, u32 packet_num);
u8 sendDATA_ACK(u32 packet_num, bool if_success);
u8 sendDATA_ACK(u32 packet_num, u8* data); // 恢复原函数签名
};
#ifdef __cplusplus
+119 -1
View File
@@ -1,16 +1,21 @@
#include "main.h"
#include "Can.h"
#include "aes128.h"
#include "initial.h"
#include "sys/systick.h"
#include <cstdio>
extern CAN_transmiter CAN0_transmiter; // CAN初始化
BootloaderSystem sys;
extern OTAHandler ota;
void BootloaderSystem::initHardware() {
systick_config(); // 系统时钟初始化
SystemCoreClockUpdate(); // 更新系统时钟变量
USART0_init(); // 调试串口初始化
rcu_periph_clock_enable(RCU_CRC); // 使能CRC外设时钟
crc_deinit(); // 初始化CRC模块
CAN0_transmiter.init();
}
void BootloaderSystem::run() {
@@ -26,8 +31,121 @@ void BootloaderSystem::run() {
ota.jumpToApplication();
}
}
// 发送单个字节到串口 (用于调试)
void uart_send_byte(uint8_t data) {
// 实际的串口发送代码
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, data);
}
// 以十六进制格式打印数据
// 安全的十六进制打印函数,不使用sprintf,不使用大缓冲区
void safe_print_hex(const char *prefix, const uint8_t *data, size_t length) {
// 1. 先打印前缀
const char *p = prefix;
while (*p) {
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, *p++);
}
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, ':');
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, ' ');
// 2. 逐字节打印数据,每16字节换行
for (size_t i = 0; i < length; i++) {
uint8_t byte = data[i];
// 打印高4位
uint8_t high = (byte >> 4) & 0x0F;
char high_char = (high < 10) ? ('0' + high) : ('A' + high - 10);
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, high_char);
// 打印低4位
uint8_t low = byte & 0x0F;
char low_char = (low < 10) ? ('0' + low) : ('A' + low - 10);
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, low_char);
// 打印空格
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, ' ');
// 每16字节换行
if ((i + 1) % 16 == 0 && i < length - 1) {
// 换行
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, '\r');
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, '\n');
// 缩进(4个空格)
for (int j = 0; j < 4; j++) {
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, ' ');
}
}
}
// 3. 打印换行
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, '\r');
while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
;
usart_data_transmit(USART0, '\n');
}
void test_decrypt() {
printf("AES Encryption Verification Starting...\r\n");
// 定义48字节测试数据
uint8_t plaintext[48] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23,
0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F};
// 定义128位密钥 (16字节)
uint8_t key[16] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};
// 创建AES上下文
aes128_context ctx;
// 设置密钥
aes128_set_key(&ctx, key);
// 打印原始数据
safe_print_hex("Original Data", plaintext, 48);
uint8_t ciphertext[48];
uint8_t decrypted[48];
// 加密
aes128_ecb_encrypt_48bytes(&ctx, plaintext, ciphertext);
safe_print_hex("Encrypted Data", ciphertext, 48);
// 解密
aes128_ecb_decrypt_48bytes(&ctx, ciphertext, decrypted);
safe_print_hex("Decrypted Data", decrypted, 48);
}
int main(void) {
sys.initHardware();
// test_decrypt();
sys.run();
while (1)
+299 -38
View File
@@ -1,4 +1,8 @@
#include "OTA.h"
#include "Can.h"
#include "aes128.h"
#include "config.h"
#include "gd32c10x.h" // 主头文件,包含了gd32c10x_crc.h的内容
#include "gd32c10x_fmc.h"
#include "systick.h"
#include <cstdio>
@@ -12,17 +16,20 @@ OTAHandler ota;
extern "C" {
void canfd_rx_irq_handler(void);
}
#define DEBUG_OTA 1
static inline uint32_t extract_u32_from_4bytes(const uint8_t *array) {
return ((uint32_t)array[3] << 24) | ((uint32_t)array[2] << 16) |
((uint32_t)array[1] << 8) | (uint32_t)array[0];
}
void OTAHandler::init() {}
void OTAHandler::process() {
if (!ota_active) {
if (ota_state == OTA_STATE_IDLE) {
ota_time = 0; // 重置计时器
static u8 zero[1] = {ota_active};
static u8 zero[1] = {0};
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_WAIT_ID, 0, zero);
#ifdef DEBUG_OTA
printf("wait OTA%d\r\n", ota_active);
#if DEBUG_OTA
printf("OTA status:%d\r\n", ota_state);
#endif
delay_1ms(10);
return;
@@ -32,9 +39,11 @@ void OTAHandler::process() {
}
// 检查是否超时(例如:10秒无数据则退出OTA模式)
if (ota_time > 10000) { // 10秒超时(10000 x 1ms)
if (ota_time > OTA_TIMEOUT) { // 10秒超时(10000 x 1ms)
ota_time = 0;
ota_active = false;
ota_state = OTA_STATE_IDLE;
ota_error = OTA_ERROR_TIMEOUT;
send_error_frame(OTA_ERROR_TIMEOUT); // 验证失败
}
}
@@ -50,7 +59,8 @@ bool OTAHandler::validateApplication() {
}
void OTAHandler::jumpToApplication() {
if (!validateApplication()) return;
if (!validateApplication())
return;
// 1. 关闭所有中断
__disable_irq();
@@ -74,10 +84,10 @@ void OTAHandler::jumpToApplication() {
rcu_periph_clock_disable(RCU_DMA0);
// 5. 设置MSP并跳转
uint32_t msp_value = *(__IO uint32_t*)APP_START_ADDR;
uint32_t msp_value = *(__IO uint32_t *)APP_START_ADDR;
__set_MSP(msp_value);
uint32_t reset_handler = *(__IO uint32_t*)(APP_START_ADDR + 4);
uint32_t reset_handler = *(__IO uint32_t *)(APP_START_ADDR + 4);
typedef void (*AppEntryFunc)(void);
AppEntryFunc app_entry = (AppEntryFunc)reset_handler;
@@ -105,52 +115,303 @@ void OTAHandler::writeApplicationData(u32 offset, u8 *data, u32 size) {
memcpy(&word, &data[i], 4);
fmc_word_program(write_addr + i, word);
}
fmc_lock();
}
void OTAHandler::handleOTAMessage(u32 id, u8 *data, u8 len) {
if (id == CANFD_OTA_REQ_ID) {
#ifdef DEBUG_OTA
printf("req OTA\r\n");
if (id == CANFD_OTA_DATA_ID) {
ota_time = 0;
if (len == 64 and ota_state == OTA_STATE_RECEIVING_FIRMWARE) {
#if DEBUG_OTA
printf("stage8:OTA_RECEIVING_FIRMWARE\r\n");
#endif
// 数据解包
u32 receive_session_num;
u32 receive_packet_num;
u8 receive_encrypted_data[OTA_PACKET_SIZE];
u32 receive_IFEND;
u8 receive_dataCRC32[4];
receive_session_num = extract_u32_from_4bytes(data);
receive_packet_num = extract_u32_from_4bytes(data + 4);
for (int i = 0; i < 48; i++) {
receive_encrypted_data[i] = data[i + 8];
}
receive_IFEND = extract_u32_from_4bytes(data + 56);
for (int i = 0; i < 4; i++) {
receive_dataCRC32[i] = data[i + 60];
}
// 解密
u8 decrypted_data[OTA_PACKET_SIZE];
u8 calculated_dataCRC32[4];
aes128_set_key(&aes_ctx, current_K_session);
aes128_ecb_decrypt_48bytes(&aes_ctx, receive_encrypted_data,
decrypted_data);
// 计算解密后CRC数据
calculate_crc32_with_key(current_K_session, decrypted_data,
calculated_dataCRC32);
// CRC数据匹配
if (memcmp(receive_dataCRC32, calculated_dataCRC32, SIZE_U32) !=
0) {
ota_error = OTA_ERROR_INVALID_CRC;
send_error_frame(OTA_ERROR_INVALID_CRC);
return;
}
if (receive_IFEND == 0xFFFFFFFF) { // 接收到尾帧,发送结束信号
u8 pack_number[4] = {0xFF, 0xFF, 0xFF, 0xFF};
CAN0_transmiter.sendDATA_ACK(CANFD_OTA_ACK_ID, pack_number);
ota_state = OTA_STATE_FINISHED;
return;
}
// 下一个请求
u32 request_packet = receive_packet_num + 1;
u8 pack_number[4];
// 封包
memcpy(&pack_number, &request_packet, 4);
CAN0_transmiter.sendDATA_ACK(CANFD_OTA_ACK_ID, pack_number);
} else if (len == 4 and ota_state == OTA_STATE_CHECKING_FIRMWARE) {
#if DEBUG_OTA
printf("stage7:OTA_STATE_CHECKING_FIRMWARE\r\n");
#endif
// OTA请求包
u32 new_size = *(u32 *)data;
if (new_size <= APP_MAX_SIZE) {
expected_size = new_size;
received_size = 0;
} else {
ota_error = OTA_ERROR_INVALID_SIZE;
send_error_frame(OTA_ERROR_INVALID_SIZE);
return;
}
// eraseApplicationArea();
ota_active = true;
sendACK(new_size); // 确认开始
#ifdef DEBUG_OTA
printf("start OTA%d\r\n", ota_active);
u8 send_data[6] = {0xBA, 0xC0, 0x00,
0x00, 0x00, 0x00}; // 确认开始传输
// 发送接收包0请求
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 6, send_data);
ota_state = OTA_STATE_RECEIVING_FIRMWARE;
} else if (len == 2 and ota_state == OTA_STATE_FINISHED) {
#if DEBUG_OTA
printf("stage8:OTA_STATE_FINISHED\r\n");
#endif
}
} else if (id == CANFD_OTA_DATA_ID && ota_active) {
// 数据包格式:[4字节包序号][实际数据]
if (len >= 4) {
u32 packet_num = *(u32 *)data;
u32 offset = packet_num * (len - 4);
u8 send_data[2] = {0x0A, 0xAC}; // 确认开始传输
// 4. 验证成功 - 发送最终ACK
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 2, send_data);
if (offset < expected_size) {
writeApplicationData(offset, &data[4], len - 4); // 写入数据
received_size += (len - 4);
sendACK(packet_num); // 确认ACK
ota_time = 0; // 重置计时器
} else {
ota_error = OTA_ERROR_INVALID_PACKET;
send_error_frame(OTA_ERROR_INVALID_PACKET);
}
} else if (id == CANFD_OTA_REQ_ID) {
ota_time = 0;
#if DEBUG_OTA
printf("stage2:OTA_STATE_WAITING_RANDOM\r\n");
#endif
if (data[0] == 0x00 and data[1] == 0xAC and len == 2 and
ota_state == OTA_STATE_IDLE) { // 收到发起信号
u8 send_data[2] = {0x00, 0xac}; // 确认握手开始,请求随机数
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 2,
send_data); // 发送握手开始信号
ota_state = OTA_STATE_WAITING_RANDOM;
} else if (len == 16 and ota_state == OTA_STATE_WAITING_RANDOM) {
#if DEBUG_OTA
printf("stage4:OTA_STATE_WAITING_CONFIRM\r\n");
#endif
while (len-- > 0) {
nonce_server[len] = data[len];
}
// 1. 获取设备唯一码
getDeviceSerialNumber(device_uid);
// 2. 初始化AES上下文(设置主密钥)
aes128_set_key(&aes_ctx, K_master);
// 3. 生成会话密钥 K_session (16字节)
u8 K_session[16];
aes128_encrypt_block(&aes_ctx, nonce_server,
K_session); // 用主密钥加密随机数
// 4. 用主密钥加密明文 (AES-128-ECB)
u8 encrypted_Ksession[16];
u8 temp_block[AES_BLOCK_SIZE];
// 加密第一个16字节块
aes128_encrypt_block(&aes_ctx, K_session, temp_block);
memcpy(encrypted_Ksession, temp_block, 16);
// 检查是否完成
if (received_size >= expected_size) {
ota_active = false;
// 跳转前延时让ACK发出
for (volatile int i = 0; i < 100000; i++)
;
jumpToApplication();
// 5. 构造握手响应包 (36字节)
u8 handshake_response[36];
// 5.1 前12字节:设备UID
memcpy(handshake_response, device_uid, 12);
// 5.2 接下来8字节:nonce后半部分
memcpy(handshake_response + 12, nonce_server + 8, 8);
// 5.3 最后16字节:加密数据的K-session
memcpy(handshake_response + 20, encrypted_Ksession, 16);
// 6. 通过CAN发送响应
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 36,
handshake_response);
// 7. 保存会话密钥供后续使用
memcpy(current_K_session, K_session, 16);
// 8. 更新状态机
ota_state = OTA_STATE_WAITING_CONFIRM;
} else if (len == 16 and ota_state == OTA_STATE_WAITING_CONFIRM) {
#if DEBUG_OTA
printf("stage6:OTA_STATE_CHECKING_SESSION\r\n");
#endif
u8 plaintext[16];
u8 expected[16];
// 1. 用K_session解密
u8 encrypted_confirm[16];
memcpy(encrypted_confirm, data, 16);
aes128_set_key(&aes_ctx, current_K_session);
aes128_decrypt_block(&aes_ctx, encrypted_confirm, plaintext);
// 2. 计算期望值 (nonce_server XOR 0x55)
// 注意:需要保存原始的nonce_server
for (int i = 0; i < 16; i++) {
expected[i] = nonce_server[i] ^ 0x55;
}
// 3. 验证解密结果
if (memcmp(plaintext, expected, 16) != 0) {
// 验证失败 - 可能密钥错误或攻击
ota_error = OTA_ERROR_INVALID_KEY;
send_error_frame(OTA_ERROR_INVALID_KEY); // 验证失败
// reset_ota_state();
return;
}
u8 send_data[2] = {0xBA, 0xC0}; // 确认开始传输
// 4. 验证成功 - 发送最终ACK
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 2, send_data);
// 5. 更新状态 - 进入固件接收阶段
ota_state = OTA_STATE_CHECKING_FIRMWARE;
} else {
// 其他握手异常
ota_error = OTA_ERROR_INVALID_HANDSHAKE;
send_error_frame(OTA_ERROR_INVALID_HANDSHAKE);
return;
}
}
}
void OTAHandler::sendACK(u32 packet_num) {
CAN0_transmiter.sendACK(CANFD_OTA_ACK_ID, packet_num);
void send_error_frame(u8 error) {
u8 error_frame[1] = {error};
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 1, error_frame);
}
/**
* @brief 获取GD32设备唯一码
* @param buffer 存储唯一码的缓冲区,至少需要12字节
* @return void
*/
void getDeviceSerialNumber(u8 *buffer) {
uint32_t serial_msb = DEVICE_SERIAL_ADDR_MSB;
uint32_t serial_mid = DEVICE_SERIAL_ADDR_MID;
uint32_t serial_lsb = DEVICE_SERIAL_ADDR_LSB;
// 将96位唯一ID复制到缓冲区 (以小端序存储)
for (int i = 0; i < 4; i++) {
buffer[i] = (u8)(serial_lsb >> (i * 8));
buffer[i + 4] = (u8)(serial_mid >> (i * 8));
buffer[i + 8] = (u8)(serial_msb >> (i * 8));
}
}
/**
* @brief 获取GD32设备唯一码为字符串格式
* @param str 存储唯一码字符串的缓冲区,至少需要25字节(包含结束符)
* @return void
*/
void getDeviceSerialNumberString(char *str) {
u8 serial[12];
getDeviceSerialNumber(serial);
// 将字节序列转换为十六进制字符串表示
for (int i = 0; i < 12; i++) {
sprintf(&str[i * 2], "%02X", serial[i]);
}
str[24] = '\0'; // 确保字符串结束
}
/**
* 带密钥的CRC32校验函数
*
* @param key 16字节密钥
* @param data 48字节待校验数据
* @param output 4字节输出缓冲区,存储CRC32校验值
*
* 特点:
* - 使用标准CRC32算法
* - 16字节密钥用于初始化CRC32状态
*/
void calculate_crc32_with_key(const uint8_t *key, const uint8_t *data,
u8 *output) {
// CRC32查找表(标准多项式0xEDB88320)
static const uint32_t crc_table[256] = {
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,
0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,
0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,
0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,
0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,
0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,
0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,
0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,
0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,
0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,
0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,
0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,
0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,
0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,
0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,
0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,
0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,
0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,
0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,
0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D};
// 用16字节密钥初始化CRC32状态
uint32_t crc = 0xFFFFFFFF;
for (int i = 0; i < 16; i++) {
crc = crc_table[(crc ^ key[i]) & 0xFF] ^ (crc >> 8);
}
// 计算48字节数据的CRC32
for (int i = 0; i < 48; i++) {
crc = crc_table[(crc ^ data[i]) & 0xFF] ^ (crc >> 8);
}
// 取反得到最终结果
crc = ~crc;
// 将CRC32结果拆分为4字节(小端格式)
output[0] = (uint8_t)(crc >> 0);
output[1] = (uint8_t)(crc >> 8);
output[2] = (uint8_t)(crc >> 16);
output[3] = (uint8_t)(crc >> 24);
}
+37 -4
View File
@@ -2,27 +2,60 @@
#define __OTA_H
#include "Can.h"
#include "aes128.h"
#include "config.h"
#include "gd32c10x.h"
#include <stdint.h>
class OTAHandler {
public:
bool ota_active;
u32 ota_time;
u32 ota_stateota_time;
uint32_t received_size;
uint32_t expected_size;
void init();
void process();
bool isActive() const { return ota_active; }
bool isActive() const { return ota_state; }
void handleOTAMessage(uint32_t id, uint8_t *data, uint8_t len);
void jumpToApplication();
private:
u16 ota_time;
bool validateApplication();
void eraseApplicationArea();
void writeApplicationData(uint32_t offset, uint8_t *data, uint32_t size);
void sendACK(uint32_t packet_num);
typedef enum {
OTA_STATE_IDLE = 0,
OTA_STATE_WAITING_RANDOM, // 第二阶段等待随机数
OTA_STATE_WAITING_CONFIRM, // 等待上位机确认
OTA_STATE_CHECKING_FIRMWARE,
OTA_STATE_RECEIVING_FIRMWARE,
OTA_STATE_FINISHED
} ota_state_t;
typedef enum {
OTA_ERROR_NONE = 0,
OTA_ERROR_TIMEOUT,
OTA_ERROR_INVALID_KEY,
OTA_ERROR_INVALID_PACKET,
OTA_ERROR_INVALID_HANDSHAKE,
OTA_ERROR_INVALID_CRC,
OTA_ERROR_INVALID_SIZE
} ota_error_t;
// 全局变量(需在安全区域存储)
uint8_t K_master[16] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB,
0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98,
0x76, 0x54, 0x32, 0x10}; // 预置主密钥
uint8_t device_uid[12]; // 从GD32 UID寄存器读取
uint8_t current_K_session[16];
uint8_t nonce_server[16];
aes128_context aes_ctx; // AES上下文
ota_state_t ota_state = OTA_STATE_IDLE;
ota_error_t ota_error = OTA_ERROR_NONE;
};
void getDeviceSerialNumber(uint8_t *buffer);
void calculate_crc32_with_key(const uint8_t *key, const uint8_t *data,
u8 *output);
void send_error_frame(uint8_t error);
#endif
+375
View File
@@ -0,0 +1,375 @@
#include "aes128.h"
// S盒 (Substitution Box)
static const u8 sbox[256] = {
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
0xb0, 0x54, 0xbb, 0x16};
// 逆S盒 (InvSBox)
const u8 inv_sbox[256] = {
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
0x55, 0x21, 0x0c, 0x7d};
// 轮常量
static const u8 rcon[10] = {0x01, 0x02, 0x04, 0x08, 0x10,
0x20, 0x40, 0x80, 0x1b, 0x36};
// 伽罗瓦域乘法 (xtime) - 确保正确
static u8 xtime(u8 x) { return (x << 1) ^ (((x >> 7) & 1) * 0x1b); }
// 关键修复:AES状态矩阵是列优先排列!
// 内存布局应该是:s00, s10, s20, s30, s01, s11, s21, s31, ...
// 而不是行优先
// 轮密钥加 - 无需修改
void add_round_key(u8 *state, const u8 *round_key) {
for (u8 i = 0; i < 16; i++) {
state[i] ^= round_key[i];
}
}
// 字节替换 - 无需修改
void sub_bytes(u8 *state) {
for (u8 i = 0; i < 16; i++) {
state[i] = sbox[state[i]];
}
}
// 行移位 - 修复为列优先排列
void shift_rows(u8 *state) {
u8 temp;
// AES状态矩阵(列优先):
// 列0: state[0], state[1], state[2], state[3] -> 行0,1,2,3
// 列1: state[4], state[5], state[6], state[7] -> 行0,1,2,3
// 列2: state[8], state[9], state[10], state[11] -> 行0,1,2,3
// 列3: state[12], state[13], state[14], state[15] -> 行0,1,2,3
// 第1行(索引0,4,8,12)不移位
// 第2行(索引1,5,9,13)左移1位
temp = state[1];
state[1] = state[5];
state[5] = state[9];
state[9] = state[13];
state[13] = temp;
// 第3行(索引2,6,10,14)左移2位
temp = state[2];
state[2] = state[10];
state[10] = temp;
temp = state[6];
state[6] = state[14];
state[14] = temp;
// 第4行(索引3,7,11,15)左移3位
temp = state[3];
state[3] = state[15];
state[15] = state[11];
state[11] = state[7];
state[7] = temp;
}
// 列混合 - 修复为正确的实现
void mix_columns(u8 *state) {
u8 a[4], b[4];
// 处理每一列
for (u8 col = 0; col < 4; col++) {
// 获取当前列的4个字节
a[0] = state[col * 4 + 0];
a[1] = state[col * 4 + 1];
a[2] = state[col * 4 + 2];
a[3] = state[col * 4 + 3];
// 计算混合后的值
b[0] = xtime(a[0]) ^ xtime(a[1]) ^ a[1] ^ a[2] ^ a[3];
b[1] = a[0] ^ xtime(a[1]) ^ xtime(a[2]) ^ a[2] ^ a[3];
b[2] = a[0] ^ a[1] ^ xtime(a[2]) ^ xtime(a[3]) ^ a[3];
b[3] = xtime(a[0]) ^ a[0] ^ a[1] ^ a[2] ^ xtime(a[3]);
// 存回结果
state[col * 4 + 0] = b[0];
state[col * 4 + 1] = b[1];
state[col * 4 + 2] = b[2];
state[col * 4 + 3] = b[3];
}
}
// 伽罗瓦域乘法 (用于逆列混合)
static u8 gf_mul(u8 a, u8 b) {
u8 p = 0;
u8 high_bit;
while (b) {
if (b & 1) {
p ^= a;
}
high_bit = a & 0x80;
a <<= 1;
if (high_bit) {
a ^= 0x1b; // x^8 + x^4 + x^3 + x + 1
}
b >>= 1;
}
return p;
}
// 逆字节替换
void inv_sub_bytes(u8 *state) {
for (u8 i = 0; i < 16; i++) {
state[i] = inv_sbox[state[i]];
}
}
// 逆行移位 - 与shift_rows对应
void inv_shift_rows(u8 *state) {
u8 temp;
// 第2行右移1位
temp = state[13];
state[13] = state[9];
state[9] = state[5];
state[5] = state[1];
state[1] = temp;
// 第3行右移2位
temp = state[2];
state[2] = state[10];
state[10] = temp;
temp = state[6];
state[6] = state[14];
state[14] = temp;
// 第4行右移3位
temp = state[7];
state[7] = state[11];
state[11] = state[15];
state[15] = state[3];
state[3] = temp;
}
// 逆列混合 - 正确实现
void inv_mix_columns(u8 *state) {
u8 a[4], b[4];
// 处理每一列
for (u8 col = 0; col < 4; col++) {
// 获取当前列的4个字节
a[0] = state[col * 4 + 0];
a[1] = state[col * 4 + 1];
a[2] = state[col * 4 + 2];
a[3] = state[col * 4 + 3];
// 计算逆混合后的值
b[0] = gf_mul(0x0e, a[0]) ^ gf_mul(0x0b, a[1]) ^ gf_mul(0x0d, a[2]) ^
gf_mul(0x09, a[3]);
b[1] = gf_mul(0x09, a[0]) ^ gf_mul(0x0e, a[1]) ^ gf_mul(0x0b, a[2]) ^
gf_mul(0x0d, a[3]);
b[2] = gf_mul(0x0d, a[0]) ^ gf_mul(0x09, a[1]) ^ gf_mul(0x0e, a[2]) ^
gf_mul(0x0b, a[3]);
b[3] = gf_mul(0x0b, a[0]) ^ gf_mul(0x0d, a[1]) ^ gf_mul(0x09, a[2]) ^
gf_mul(0x0e, a[3]);
// 存回结果
state[col * 4 + 0] = b[0];
state[col * 4 + 1] = b[1];
state[col * 4 + 2] = b[2];
state[col * 4 + 3] = b[3];
}
}
// 密钥扩展 - 修复为标准实现
static void key_expansion(aes128_context *ctx) {
u8 temp[4];
u8 i, rcon_iter = 0;
// 复制原始密钥到第一轮密钥
memcpy(ctx->round_keys[0], ctx->key, 16);
// 生成10轮密钥
for (i = 1; i <= 10; i++) {
// 复制前一轮最后一列
temp[0] = ctx->round_keys[i - 1][12];
temp[1] = ctx->round_keys[i - 1][13];
temp[2] = ctx->round_keys[i - 1][14];
temp[3] = ctx->round_keys[i - 1][15];
// 字循环 (RotWord)
u8 t = temp[0];
temp[0] = temp[1];
temp[1] = temp[2];
temp[2] = temp[3];
temp[3] = t;
// 字节替换 (SubWord)
temp[0] = sbox[temp[0]];
temp[1] = sbox[temp[1]];
temp[2] = sbox[temp[2]];
temp[3] = sbox[temp[3]];
// 轮常量异或
temp[0] ^= rcon[i - 1];
// 生成新的第一列
ctx->round_keys[i][0] = ctx->round_keys[i - 1][0] ^ temp[0];
ctx->round_keys[i][1] = ctx->round_keys[i - 1][1] ^ temp[1];
ctx->round_keys[i][2] = ctx->round_keys[i - 1][2] ^ temp[2];
ctx->round_keys[i][3] = ctx->round_keys[i - 1][3] ^ temp[3];
// 生成其他列
for (u8 j = 1; j < 4; j++) {
ctx->round_keys[i][j * 4 + 0] =
ctx->round_keys[i][(j - 1) * 4 + 0] ^
ctx->round_keys[i - 1][j * 4 + 0];
ctx->round_keys[i][j * 4 + 1] =
ctx->round_keys[i][(j - 1) * 4 + 1] ^
ctx->round_keys[i - 1][j * 4 + 1];
ctx->round_keys[i][j * 4 + 2] =
ctx->round_keys[i][(j - 1) * 4 + 2] ^
ctx->round_keys[i - 1][j * 4 + 2];
ctx->round_keys[i][j * 4 + 3] =
ctx->round_keys[i][(j - 1) * 4 + 3] ^
ctx->round_keys[i - 1][j * 4 + 3];
}
}
}
// 设置密钥
void aes128_set_key(aes128_context *ctx, const u8 *key) {
memcpy(ctx->key, key, AES128_KEY_LEN);
key_expansion(ctx);
}
// 加密单个块
void aes128_encrypt_block(aes128_context *ctx, const u8 *input,
u8 *output) {
// 复制输入到状态
memcpy(ctx->state, input, AES_BLOCK_SIZE);
// 初始轮密钥加
add_round_key(ctx->state, ctx->round_keys[0]);
// 9轮标准轮
for (u8 round = 1; round <= 9; round++) {
sub_bytes(ctx->state);
shift_rows(ctx->state);
mix_columns(ctx->state);
add_round_key(ctx->state, ctx->round_keys[round]);
}
// 最终轮 (没有mix_columns)
sub_bytes(ctx->state);
shift_rows(ctx->state);
add_round_key(ctx->state, ctx->round_keys[10]);
// 复制结果到输出
memcpy(output, ctx->state, AES_BLOCK_SIZE);
}
// ECB模式加密48字节数据
void aes128_ecb_encrypt_48bytes(aes128_context *ctx, const u8 *input,
u8 *output) {
// 分3块加密 (48 = 16 * 3)
aes128_encrypt_block(ctx, input, output);
aes128_encrypt_block(ctx, input + 16, output + 16);
aes128_encrypt_block(ctx, input + 32, output + 32);
}
// 解密单个块
void aes128_decrypt_block(aes128_context *ctx, const u8 *input,
u8 *output) {
// 复制输入到状态
memcpy(ctx->state, input, AES_BLOCK_SIZE);
// 初始轮密钥加(使用最后一轮密钥)
add_round_key(ctx->state, ctx->round_keys[10]);
// 9轮标准解密轮
for (u8 round = 9; round >= 1; round--) {
inv_shift_rows(ctx->state);
inv_sub_bytes(ctx->state);
add_round_key(ctx->state, ctx->round_keys[round]);
inv_mix_columns(ctx->state);
}
// 最终轮(没有inv_mix_columns)
inv_shift_rows(ctx->state);
inv_sub_bytes(ctx->state);
add_round_key(ctx->state, ctx->round_keys[0]);
// 复制结果到输出
memcpy(output, ctx->state, AES_BLOCK_SIZE);
}
// ECB模式解密48字节数据
void aes128_ecb_decrypt_48bytes(aes128_context *ctx, const u8 *input,
u8 *output) {
// 分3块解密 (48 = 16 * 3)
aes128_decrypt_block(ctx, input, output);
aes128_decrypt_block(ctx, input + 16, output + 16);
aes128_decrypt_block(ctx, input + 32, output + 32);
}
// 验证函数:加密后解密,对比原始数据
u8 aes128_verify_encryption(aes128_context *ctx,
const u8 *original_data, size_t length) {
u8 temp_ciphertext[48];
u8 temp_plaintext[48];
u8 result = 1; // 1表示验证成功,0表示失败
// 1. 加密原始数据
aes128_ecb_encrypt_48bytes(ctx, original_data, temp_ciphertext);
// 2. 解密密文
aes128_ecb_decrypt_48bytes(ctx, temp_ciphertext, temp_plaintext);
// 3. 对比原始数据和解密后的数据
for (size_t i = 0; i < length; i++) {
if (original_data[i] != temp_plaintext[i]) {
result = 0; // 验证失败
break;
}
}
return result;
}
+39
View File
@@ -0,0 +1,39 @@
#ifndef __AES_H
#define __AES_H
#include <stdint.h>
#include <string.h>
// AES-128 密钥长度 (16 bytes)
#define AES128_KEY_LEN 16
// AES 块大小 (16 bytes)
#define AES_BLOCK_SIZE 16
// AES 状态结构
typedef struct {
u8 key[AES128_KEY_LEN]; // 128位/16字节密钥
u8 round_keys[11][16]; // 10轮 + 初始轮密钥
u8 state[AES_BLOCK_SIZE]; // 状态矩阵
} aes128_context;
// 内部函数声明(需要在头文件中声明,因为解密函数会使用)
void add_round_key(u8 *state, const u8 *round_key);
void sub_bytes(u8 *state);
void shift_rows(u8 *state);
void mix_columns(u8 *state);
void inv_sub_bytes(u8 *state);
void inv_shift_rows(u8 *state);
void inv_mix_columns(u8 *state);
// 公共函数声明
void aes128_set_key(aes128_context *ctx, const u8 *key);
void aes128_encrypt_block(aes128_context *ctx, const u8 *input, u8 *output);
void aes128_ecb_encrypt_48bytes(aes128_context *ctx, const u8 *input, u8 *output);
void aes128_decrypt_block(aes128_context *ctx, const u8 *input, u8 *output);
void aes128_ecb_decrypt_48bytes(aes128_context *ctx, const u8 *input, u8 *output);
u8 aes128_verify_encryption(aes128_context *ctx, const u8 *original_data, size_t length);
// 逆S盒 (用于解密)
extern const u8 inv_sbox[256];
#endif /* __AES_H */
+28 -1
View File
@@ -2,9 +2,12 @@
#define __CONFIG_H__
#include "stdint.h"
#define EEPDEBUG 0
#define DEBUG_OTA 0
// Flash分区配置
constexpr u32 BOOTLOADER_SIZE = 0x4000; // 16KB
constexpr u32 APP_START_ADDR = 0x08004000; // APP起始地址
constexpr u32 APP_START_ADDR = 0x08010000; // APP起始地址 0x08004000
constexpr u32 APP2_START_ADDR = 0x08010000; // APP2起始地址
constexpr u32 APP_MAX_SIZE = 0xC000; // 48KB
constexpr u32 FMC_PAGE_SIZE = 0x400; // 1KB
@@ -15,6 +18,11 @@ constexpr u32 CANFD_OTA_DATA_ID = 0x00000101;
constexpr u32 CANFD_OTA_ACK_ID = 0x00000102;
constexpr u32 CANFD_OTA_WAIT_ID = 0x00000103;
// 设备唯一ID寄存器地址 (GD32C10x系列)
constexpr u32 DEVICE_SERIAL_ADDR_MSB = 0x1FFFF7E8; // 最高32位
constexpr u32 DEVICE_SERIAL_ADDR_MID = 0x1FFFF7EC; // 中间32位
constexpr u32 DEVICE_SERIAL_ADDR_LSB = 0x1FFFF7F0; // 最低32位
// CANFD数据段最大64字节,我们用1字节序号 + 48字节数据 + 1字节CRC校验
constexpr u32 OTA_PACKET_SIZE = 48;
typedef struct {
@@ -23,4 +31,23 @@ typedef struct {
u32 crc32; // 简单校验
} canfd_ota_packet_t;
// 定义一个联合体类型用于float和byte数组之间的转换
typedef union {
u32 u;
u8 b[4];
} u32_union_t;
// 添加辅助函数用于从u8数组中解包float类型数据
static inline u32_union_t unpack_bytes_to_float(u8 *buffer, u16 offset) {
u32_union_t u32_union;
u32_union.b[0] = buffer[offset];
u32_union.b[1] = buffer[offset + 1];
u32_union.b[2] = buffer[offset + 2];
u32_union.b[3] = buffer[offset + 3];
return u32_union;
}
// 其他
constexpr u32 OTA_TIMEOUT = 10000;
constexpr u8 SIZE_U32 = sizeof(uint32_t);
constexpr u8 SIZE_FLOAT = sizeof(float);
#endif
-3
View File
@@ -10,9 +10,6 @@
#include <stdint.h>
FlashEEPROM flashEEP = FlashEEPROM();
constexpr u8 SIZE_U32 = sizeof(uint32_t);
constexpr u8 SIZE_FLOAT = sizeof(float);
#define EEPDEBUG 0
// FlashEEPROM类实现
FlashEEPROM::FlashEEPROM() {
+1
View File
@@ -14,6 +14,7 @@ int fputc(int ch, FILE *f); // 声明fputc函数以重载标准库实现
u8 USART0_init(void);
u16 get_reset_cause(void);
void unused_pin_init();
void print_system_clock_info(void);
#ifdef __cplusplus
}
@@ -285,6 +285,10 @@ build:
category: header
- file: ../../../../Robot_V2/main.cpp
category: sourceCpp
- file: ../../../../Robot_V2/sys/aes128.h
category: header
- file: ../../../../Robot_V2/sys/aes128.cpp
category: sourceCpp
- group: sys
files:
- file: ../../../../Robot_V2/sys/systick.cpp
Binary file not shown.
+155 -150
View File
@@ -4,142 +4,149 @@ Component: Arm Compiler for Embedded 6.24 Tool: armlink [5f371500]
Memory Map of the image
Image Entry point : 0x00000000
Image Entry point : 0x08000165
Load Region LR_ROM0 (Base: 0x08000000, Size: 0x00002b20, Max: 0x00020000, ABSOLUTE)
Load Region LR_ROM0 (Base: 0x08000000, Size: 0x00004800, Max: 0x00020000, ABSOLUTE, COMPRESSED[0x00004610])
Execution Region ER_ROM0 (Base: 0x08000000, Size: 0x00002a28, Max: 0x00020000, ABSOLUTE)
Execution Region ER_ROM0 (Base: 0x08000000, Size: 0x000045ec, Max: 0x00020000, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x08000000 0x00000150 Data RO 844 RESET startup_gd32c10x.o
0x08000150 0x00000000 Code RO 1017 * .ARM.Collect$$$$00000000 mc_w.l(entry.o)
0x08000150 0x00000004 Code RO 1440 .ARM.Collect$$$$00000003 mc_w.l(entry4.o)
0x08000154 0x00000004 Code RO 1443 .ARM.Collect$$$$00000004 mc_w.l(entry5.o)
0x08000158 0x00000000 Code RO 1445 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o)
0x08000158 0x00000000 Code RO 1447 .ARM.Collect$$$$0000000A mc_w.l(entry8b.o)
0x08000158 0x00000008 Code RO 1448 .ARM.Collect$$$$0000000B mc_w.l(entry9a.o)
0x08000160 0x00000000 Code RO 1450 .ARM.Collect$$$$0000000D mc_w.l(entry10a.o)
0x08000160 0x00000000 Code RO 1452 .ARM.Collect$$$$0000000F mc_w.l(entry11a.o)
0x08000160 0x00000004 Code RO 1441 .ARM.Collect$$$$00002714 mc_w.l(entry4.o)
0x08000164 0x0000002c Code RO 845 * .text startup_gd32c10x.o
0x08000190 0x00000024 Code RO 1024 .text mc_w.l(memcpya.o)
0x080001b4 0x00000024 Code RO 1026 .text mc_w.l(memseta.o)
0x080001d8 0x00000062 Code RO 1466 .text mc_w.l(uldiv.o)
0x0800023a 0x00000002 Code RO 1468 .text mc_w.l(abort.o)
0x0800023c 0x00000030 Code RO 1795 .text mc_w.l(init.o)
0x0800026c 0x0000001e Code RO 1797 .text mc_w.l(llshl.o)
0x0800028a 0x00000020 Code RO 1799 .text mc_w.l(llushr.o)
0x080002aa 0x00000002 PAD
0x080002ac 0x000000cc Code RO 131 .text.CAN0_RX0_IRQHandler Can.o
0x08000378 0x0000004a Code RO 133 .text.DMA0_Channel4_IRQHandler Can.o
0x080003c2 0x00000002 PAD
0x080003c4 0x00000026 Code RO 135 .text.DMA0_Channel5_IRQHandler Can.o
0x080003ea 0x00000002 PAD
0x080003ec 0x000000e0 Code RO 853 .text.SystemCoreClockUpdate system_gd32c10x.o
0x080004cc 0x00000342 Code RO 851 .text.SystemInit system_gd32c10x.o
0x0800080e 0x00000002 PAD
0x08000810 0x00000012 Code RO 45 .text.USART0_init initial.o
0x08000822 0x00000002 PAD
0x08000824 0x00000130 Code RO 99 .text._ZN10OTAHandler16handleOTAMessageEjPhh OTA.o
0x08000954 0x000000a8 Code RO 93 .text._ZN10OTAHandler17jumpToApplicationEv OTA.o
0x080009fc 0x000000a0 Code RO 89 .text._ZN10OTAHandler7processEv OTA.o
0x08000a9c 0x00000028 Code RO 874 .text._ZN10__cxxabiv121__isOurExceptionClassEPK21_Unwind_Control_Block libcppabi_wx.l(cxa_exception.cpp.o)
0x08000ac4 0x00000060 Code RO 902 .text._ZN10__cxxabiv1L22__cxa_end_cleanup_implEv libcppabi_wx.l(cxa_exception.cpp.o)
0x08000b24 0x00000118 Code RO 129 .text._ZN14CAN_transmiter15CANFD_AsyncSendEjhPh Can.o
0x08000c3c 0x000000d0 Code RO 125 .text._ZN14CAN_transmiter19communication_checkEv Can.o
0x08000d0c 0x00000038 Code RO 123 .text._ZN14CAN_transmiter4initEv Can.o
0x08000d44 0x00000070 Code RO 127 .text._ZN14CAN_transmiter7sendACKEjj Can.o
0x08000db4 0x00000074 Code RO 954 .text._ZSt11__terminatePFvvE libcppabi_wx.l(cxa_handlers.cpp.o)
0x08000e28 0x00000030 Code RO 945 .text._ZSt9terminatev libcppabi_wx.l(cxa_handlers.cpp.o)
0x08000e58 0x0000000a Code RO 931 .text.__clang_call_terminate libcppabi_wx.l(cxa_exception.cpp.o)
0x08000e62 0x00000002 PAD
0x08000e64 0x0000006c Code RO 879 .text.__cxa_begin_catch libcppabi_wx.l(cxa_exception.cpp.o)
0x08000ed0 0x0000000a Code RO 1307 .text.__cxa_get_globals libcppabi_wx.l(cxa_exception_storage.cpp.o)
0x08000eda 0x0000000a Code RO 1309 .text.__cxa_get_globals_fast libcppabi_wx.l(cxa_exception_storage.cpp.o)
0x08000ee4 0x00000026 Code RO 185 .text.can_deinit gd32c10x_can.o
0x08000f0a 0x00000002 PAD
0x08000f0c 0x00000114 Code RO 191 .text.can_fd_init gd32c10x_can.o
0x08001020 0x000000b2 Code RO 193 .text.can_filter_init gd32c10x_can.o
0x080010d2 0x00000002 PAD
0x080010d4 0x00000176 Code RO 189 .text.can_init gd32c10x_can.o
0x0800124a 0x00000002 PAD
0x0800124c 0x00000008 Code RO 235 .text.can_interrupt_enable gd32c10x_can.o
0x08001254 0x00000016 Code RO 245 .text.can_interrupt_flag_clear gd32c10x_can.o
0x0800126a 0x00000002 PAD
0x0800126c 0x00000066 Code RO 243 .text.can_interrupt_flag_get gd32c10x_can.o
0x080012d2 0x00000002 PAD
0x080012d4 0x000001f4 Code RO 219 .text.can_message_receive gd32c10x_can.o
0x080014c8 0x000001f0 Code RO 213 .text.can_message_transmit gd32c10x_can.o
0x080016b8 0x00000018 Code RO 223 .text.can_receive_message_length_get gd32c10x_can.o
0x080016d0 0x00000072 Code RO 187 .text.can_struct_para_init gd32c10x_can.o
0x08001742 0x00000002 PAD
0x08001744 0x000001b0 Code RO 121 .text.canfd_config Can.o
0x080018f4 0x00000022 Code RO 27 .text.delay_1ms systick.o
0x08001916 0x00000002 PAD
0x08001918 0x00000018 Code RO 29 .text.delay_decrement systick.o
0x08001930 0x00000024 Code RO 325 .text.dma_channel_disable gd32c10x_dma.o
0x08001954 0x00000024 Code RO 323 .text.dma_channel_enable gd32c10x_dma.o
0x08001978 0x00000074 Code RO 313 .text.dma_init gd32c10x_dma.o
0x080019ec 0x00000022 Code RO 359 .text.dma_interrupt_enable gd32c10x_dma.o
0x08001a0e 0x00000002 PAD
0x08001a10 0x0000000e Code RO 357 .text.dma_interrupt_flag_clear gd32c10x_dma.o
0x08001a1e 0x00000002 PAD
0x08001a20 0x0000003a Code RO 355 .text.dma_interrupt_flag_get gd32c10x_dma.o
0x08001a5a 0x00000002 PAD
0x08001a5c 0x0000001a Code RO 311 .text.dma_struct_para_init gd32c10x_dma.o
0x08001a76 0x00000002 PAD
0x08001a78 0x00000012 Code RO 429 .text.fmc_lock gd32c10x_fmc.o
0x08001a8a 0x00000002 PAD
0x08001a8c 0x00000026 Code RO 427 .text.fmc_unlock gd32c10x_fmc.o
0x08001ab2 0x00000002 PAD
0x08001ab4 0x000001aa Code RO 439 .text.fmc_word_program gd32c10x_fmc.o
0x08001c5e 0x00000002 PAD
0x08001c60 0x0000002c Code RO 47 .text.fputc initial.o
0x08001c8c 0x00000010 Code RO 498 .text.fwdgt_counter_reload gd32c10x_fwdgt.o
0x08001c9c 0x00000098 Code RO 168 .text.gd_eval_com_init gd32c10x_eval.o
0x08001d34 0x00000004 Code RO 523 .text.gpio_bit_reset gd32c10x_gpio.o
0x08001d38 0x000002c0 Code RO 519 .text.gpio_init gd32c10x_gpio.o
0x08001ff8 0x00000080 Code RO 537 .text.gpio_pin_remap_config gd32c10x_gpio.o
0x08002078 0x00000032 Code RO 8 .text.main main.o
0x080020aa 0x00000002 PAD
0x080020ac 0x00000060 Code RO 566 .text.nvic_irq_enable gd32c10x_misc.o
0x0800210c 0x0000001c Code RO 570 .text.nvic_vector_table_set gd32c10x_misc.o
0x08002128 0x0000010c Code RO 716 .text.rcu_clock_freq_get gd32c10x_rcu.o
0x08002234 0x00000020 Code RO 636 .text.rcu_periph_clock_disable gd32c10x_rcu.o
0x08002254 0x0000001e Code RO 634 .text.rcu_periph_clock_enable gd32c10x_rcu.o
0x08002272 0x00000002 PAD
0x08002274 0x00000020 Code RO 644 .text.rcu_periph_reset_disable gd32c10x_rcu.o
0x08002294 0x0000001e Code RO 642 .text.rcu_periph_reset_enable gd32c10x_rcu.o
0x080022b2 0x00000002 PAD
0x080022b4 0x00000014 Code RO 650 .text.rcu_system_clock_source_config gd32c10x_rcu.o
0x080022c8 0x00000048 Code RO 23 .text.systick_config systick.o
0x08002310 0x0000002c Code RO 934 .text.unlikely.__cxa_guard_acquire libcppabi_wx.l(cxa_guard.cpp.o)
0x0800233c 0x00000008 Code RO 936 .text.unlikely.__cxa_guard_release libcppabi_wx.l(cxa_guard.cpp.o)
0x08002344 0x00000006 Code RO 1292 .text.unlikely.abort_message libcppabi_wx.l(abort_message.cpp.o)
0x0800234a 0x00000002 PAD
0x0800234c 0x0000006a Code RO 732 .text.usart_baudrate_set gd32c10x_usart.o
0x080023b6 0x00000002 PAD
0x080023b8 0x00000008 Code RO 758 .text.usart_data_transmit gd32c10x_usart.o
0x080023c0 0x0000007a Code RO 730 .text.usart_deinit gd32c10x_usart.o
0x0800243a 0x00000002 PAD
0x0800243c 0x0000000a Code RO 740 .text.usart_enable gd32c10x_usart.o
0x08002446 0x00000002 PAD
0x08002448 0x00000010 Code RO 820 .text.usart_flag_get gd32c10x_usart.o
0x08002458 0x00000014 Code RO 746 .text.usart_receive_config gd32c10x_usart.o
0x0800246c 0x00000014 Code RO 744 .text.usart_transmit_config gd32c10x_usart.o
0x08002480 0x00000020 Code RO 1237 i.__0printf$8 mc_w.l(printf8.o)
0x080024a0 0x00000410 Code RO 1244 i._printf_core mc_w.l(printf8.o)
0x080028b0 0x00000024 Code RO 1245 i._printf_post_padding mc_w.l(printf8.o)
0x080028d4 0x0000002e Code RO 1246 i._printf_pre_padding mc_w.l(printf8.o)
0x08002902 0x00000002 PAD
0x08002904 0x00000024 Code RO 1020 i.puts mc_w.l(puts.o)
0x08002928 0x00000008 Data RO 718 .rodata.cst8 gd32c10x_rcu.o
0x08002930 0x00000007 Data RO 247 .rodata.g_can_fdlength_table gd32c10x_can.o
0x08002937 0x0000005c Data RO 144 .rodata.str1.1 Can.o
0x08002993 0x00000093 Data RO 940 .rodata.str1.1 libcppabi_wx.l(cxa_guard.cpp.o)
0x08002a26 0x00000002 PAD
0x08002a28 0x00000000 Data RO 1883 Region$$Table anon$$obj.o
0x08000000 0x00000150 Data RO 899 RESET startup_gd32c10x.o
0x08000150 0x00000000 Code RO 1063 * .ARM.Collect$$$$00000000 mc_w.l(entry.o)
0x08000150 0x00000004 Code RO 1488 .ARM.Collect$$$$00000003 mc_w.l(entry4.o)
0x08000154 0x00000004 Code RO 1491 .ARM.Collect$$$$00000004 mc_w.l(entry5.o)
0x08000158 0x00000000 Code RO 1493 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o)
0x08000158 0x00000000 Code RO 1495 .ARM.Collect$$$$0000000A mc_w.l(entry8b.o)
0x08000158 0x00000008 Code RO 1496 .ARM.Collect$$$$0000000B mc_w.l(entry9a.o)
0x08000160 0x00000000 Code RO 1498 .ARM.Collect$$$$0000000D mc_w.l(entry10a.o)
0x08000160 0x00000000 Code RO 1500 .ARM.Collect$$$$0000000F mc_w.l(entry11a.o)
0x08000160 0x00000004 Code RO 1489 .ARM.Collect$$$$00002714 mc_w.l(entry4.o)
0x08000164 0x0000002c Code RO 900 * .text startup_gd32c10x.o
0x08000190 0x00000024 Code RO 1070 .text mc_w.l(memcpya.o)
0x080001b4 0x00000024 Code RO 1072 .text mc_w.l(memseta.o)
0x080001d8 0x0000001a Code RO 1074 .text mc_w.l(memcmp.o)
0x080001f2 0x00000062 Code RO 1514 .text mc_w.l(uldiv.o)
0x08000254 0x00000002 Code RO 1516 .text mc_w.l(abort.o)
0x08000256 0x00000002 PAD
0x08000258 0x00000030 Code RO 1843 .text mc_w.l(init.o)
0x08000288 0x0000001e Code RO 1845 .text mc_w.l(llshl.o)
0x080002a6 0x00000020 Code RO 1847 .text mc_w.l(llushr.o)
0x080002c6 0x0000003a Code RO 1938 .text mc_w.l(__dczerorl.o)
0x08000300 0x000000cc Code RO 186 .text.CAN0_RX0_IRQHandler Can.o
0x080003cc 0x0000004a Code RO 188 .text.DMA0_Channel4_IRQHandler Can.o
0x08000416 0x00000002 PAD
0x08000418 0x00000026 Code RO 190 .text.DMA0_Channel5_IRQHandler Can.o
0x0800043e 0x00000002 PAD
0x08000440 0x00000342 Code RO 906 .text.SystemInit system_gd32c10x.o
0x08000782 0x00000002 PAD
0x08000784 0x00000012 Code RO 91 .text.USART0_init initial.o
0x08000796 0x00000002 PAD
0x08000798 0x00000198 Code RO 36 .text._Z11mix_columnsPh aes128.o
0x08000930 0x00000238 Code RO 44 .text._Z14aes128_set_keyP14aes128_contextPKh aes128.o
0x08000b68 0x000008e2 Code RO 42 .text._Z15inv_mix_columnsPh aes128.o
0x0800144a 0x00000002 PAD
0x0800144c 0x000003c8 Code RO 50 .text._Z20aes128_decrypt_blockP14aes128_contextPKhPh aes128.o
0x08001814 0x000003e6 Code RO 46 .text._Z20aes128_encrypt_blockP14aes128_contextPKhPh aes128.o
0x08001bfa 0x00000002 PAD
0x08001bfc 0x00000210 Code RO 149 .text._Z24calculate_crc32_with_keyPKhS0_Ph OTA.o
0x08001e0c 0x0000002c Code RO 52 .text._Z26aes128_ecb_decrypt_48bytesP14aes128_contextPKhPh aes128.o
0x08001e38 0x00000410 Code RO 147 .text._ZN10OTAHandler16handleOTAMessageEjPhh OTA.o
0x08002248 0x00000078 Code RO 135 .text._ZN10OTAHandler7processEv OTA.o
0x080022c0 0x00000028 Code RO 929 .text._ZN10__cxxabiv121__isOurExceptionClassEPK21_Unwind_Control_Block libcppabi_wx.l(cxa_exception.cpp.o)
0x080022e8 0x00000060 Code RO 957 .text._ZN10__cxxabiv1L22__cxa_end_cleanup_implEv libcppabi_wx.l(cxa_exception.cpp.o)
0x08002348 0x0000009e Code RO 180 .text._ZN14CAN_transmiter12sendDATA_ACKEjPh Can.o
0x080023e6 0x00000002 PAD
0x080023e8 0x00000178 Code RO 182 .text._ZN14CAN_transmiter15CANFD_AsyncSendEjhPh Can.o
0x08002560 0x00000064 Code RO 178 .text._ZN14CAN_transmiter19communication_checkEv Can.o
0x080025c4 0x00000038 Code RO 176 .text._ZN14CAN_transmiter4initEv Can.o
0x080025fc 0x00000074 Code RO 1000 .text._ZSt11__terminatePFvvE libcppabi_wx.l(cxa_handlers.cpp.o)
0x08002670 0x00000030 Code RO 991 .text._ZSt9terminatev libcppabi_wx.l(cxa_handlers.cpp.o)
0x080026a0 0x0000000a Code RO 986 .text.__clang_call_terminate libcppabi_wx.l(cxa_exception.cpp.o)
0x080026aa 0x00000002 PAD
0x080026ac 0x0000006c Code RO 934 .text.__cxa_begin_catch libcppabi_wx.l(cxa_exception.cpp.o)
0x08002718 0x0000000a Code RO 1355 .text.__cxa_get_globals libcppabi_wx.l(cxa_exception_storage.cpp.o)
0x08002722 0x0000000a Code RO 1357 .text.__cxa_get_globals_fast libcppabi_wx.l(cxa_exception_storage.cpp.o)
0x0800272c 0x00000026 Code RO 240 .text.can_deinit gd32c10x_can.o
0x08002752 0x00000002 PAD
0x08002754 0x00000114 Code RO 246 .text.can_fd_init gd32c10x_can.o
0x08002868 0x000000b2 Code RO 248 .text.can_filter_init gd32c10x_can.o
0x0800291a 0x00000002 PAD
0x0800291c 0x00000176 Code RO 244 .text.can_init gd32c10x_can.o
0x08002a92 0x00000002 PAD
0x08002a94 0x00000008 Code RO 290 .text.can_interrupt_enable gd32c10x_can.o
0x08002a9c 0x00000016 Code RO 300 .text.can_interrupt_flag_clear gd32c10x_can.o
0x08002ab2 0x00000002 PAD
0x08002ab4 0x00000066 Code RO 298 .text.can_interrupt_flag_get gd32c10x_can.o
0x08002b1a 0x00000002 PAD
0x08002b1c 0x000001f4 Code RO 274 .text.can_message_receive gd32c10x_can.o
0x08002d10 0x000001f0 Code RO 268 .text.can_message_transmit gd32c10x_can.o
0x08002f00 0x00000018 Code RO 278 .text.can_receive_message_length_get gd32c10x_can.o
0x08002f18 0x00000072 Code RO 242 .text.can_struct_para_init gd32c10x_can.o
0x08002f8a 0x00000002 PAD
0x08002f8c 0x000001b0 Code RO 174 .text.canfd_config Can.o
0x0800313c 0x00000018 Code RO 314 .text.crc_deinit gd32c10x_crc.o
0x08003154 0x00000022 Code RO 73 .text.delay_1ms systick.o
0x08003176 0x00000002 PAD
0x08003178 0x00000018 Code RO 75 .text.delay_decrement systick.o
0x08003190 0x00000024 Code RO 380 .text.dma_channel_disable gd32c10x_dma.o
0x080031b4 0x00000024 Code RO 378 .text.dma_channel_enable gd32c10x_dma.o
0x080031d8 0x00000074 Code RO 368 .text.dma_init gd32c10x_dma.o
0x0800324c 0x00000022 Code RO 414 .text.dma_interrupt_enable gd32c10x_dma.o
0x0800326e 0x00000002 PAD
0x08003270 0x0000000e Code RO 412 .text.dma_interrupt_flag_clear gd32c10x_dma.o
0x0800327e 0x00000002 PAD
0x08003280 0x0000003a Code RO 410 .text.dma_interrupt_flag_get gd32c10x_dma.o
0x080032ba 0x00000002 PAD
0x080032bc 0x0000001a Code RO 366 .text.dma_struct_para_init gd32c10x_dma.o
0x080032d6 0x00000002 PAD
0x080032d8 0x0000002c Code RO 93 .text.fputc initial.o
0x08003304 0x00000010 Code RO 553 .text.fwdgt_counter_reload gd32c10x_fwdgt.o
0x08003314 0x00000098 Code RO 223 .text.gd_eval_com_init gd32c10x_eval.o
0x080033ac 0x00000004 Code RO 578 .text.gpio_bit_reset gd32c10x_gpio.o
0x080033b0 0x000002c0 Code RO 574 .text.gpio_init gd32c10x_gpio.o
0x08003670 0x00000080 Code RO 592 .text.gpio_pin_remap_config gd32c10x_gpio.o
0x080036f0 0x0000003a Code RO 14 .text.main main.o
0x0800372a 0x00000002 PAD
0x0800372c 0x00000060 Code RO 621 .text.nvic_irq_enable gd32c10x_misc.o
0x0800378c 0x0000001c Code RO 625 .text.nvic_vector_table_set gd32c10x_misc.o
0x080037a8 0x0000010c Code RO 771 .text.rcu_clock_freq_get gd32c10x_rcu.o
0x080038b4 0x0000001e Code RO 689 .text.rcu_periph_clock_enable gd32c10x_rcu.o
0x080038d2 0x00000002 PAD
0x080038d4 0x00000020 Code RO 699 .text.rcu_periph_reset_disable gd32c10x_rcu.o
0x080038f4 0x0000001e Code RO 697 .text.rcu_periph_reset_enable gd32c10x_rcu.o
0x08003912 0x00000002 PAD
0x08003914 0x00000048 Code RO 69 .text.systick_config systick.o
0x0800395c 0x00000006 Code RO 1340 .text.unlikely.abort_message libcppabi_wx.l(abort_message.cpp.o)
0x08003962 0x00000002 PAD
0x08003964 0x0000006a Code RO 787 .text.usart_baudrate_set gd32c10x_usart.o
0x080039ce 0x00000002 PAD
0x080039d0 0x00000008 Code RO 813 .text.usart_data_transmit gd32c10x_usart.o
0x080039d8 0x0000007a Code RO 785 .text.usart_deinit gd32c10x_usart.o
0x08003a52 0x00000002 PAD
0x08003a54 0x0000000a Code RO 795 .text.usart_enable gd32c10x_usart.o
0x08003a5e 0x00000002 PAD
0x08003a60 0x00000010 Code RO 875 .text.usart_flag_get gd32c10x_usart.o
0x08003a70 0x00000014 Code RO 801 .text.usart_receive_config gd32c10x_usart.o
0x08003a84 0x00000014 Code RO 799 .text.usart_transmit_config gd32c10x_usart.o
0x08003a98 0x00000020 Code RO 1285 i.__0printf$8 mc_w.l(printf8.o)
0x08003ab8 0x0000000e Code RO 1932 i.__scatterload_copy mc_w.l(handlers.o)
0x08003ac6 0x00000002 Code RO 1933 i.__scatterload_null mc_w.l(handlers.o)
0x08003ac8 0x0000000e Code RO 1934 i.__scatterload_zeroinit mc_w.l(handlers.o)
0x08003ad6 0x00000002 PAD
0x08003ad8 0x00000410 Code RO 1292 i._printf_core mc_w.l(printf8.o)
0x08003ee8 0x00000024 Code RO 1293 i._printf_post_padding mc_w.l(printf8.o)
0x08003f0c 0x0000002e Code RO 1294 i._printf_pre_padding mc_w.l(printf8.o)
0x08003f3a 0x00000002 PAD
0x08003f3c 0x00000024 Code RO 1066 i.puts mc_w.l(puts.o)
0x08003f60 0x00000100 Data RO 57 .rodata._ZL4sbox aes128.o
0x08004060 0x00000400 Data RO 158 .rodata._ZZ24calculate_crc32_with_keyPKhS0_PhE9crc_table OTA.o
0x08004460 0x00000008 Data RO 773 .rodata.cst8 gd32c10x_rcu.o
0x08004468 0x00000007 Data RO 302 .rodata.g_can_fdlength_table gd32c10x_can.o
0x0800446f 0x00000100 Data RO 56 .rodata.inv_sbox aes128.o
0x0800456f 0x0000005c Data RO 199 .rodata.str1.1 Can.o
0x080045cb 0x00000001 PAD
0x080045cc 0x00000020 Data RO 1931 Region$$Table anon$$obj.o
Execution Region RW_NOINIT (Base: 0x20000000, Size: 0x00000000, Max: 0x00007200, ABSOLUTE, UNINIT)
@@ -147,33 +154,31 @@ Memory Map of the image
**** No section assigned to this execution region ****
Execution Region RW_RAM0 (Base: 0x20000000, Size: 0x00000968, Max: 0x00007200, ABSOLUTE)
Execution Region RW_RAM0 (Base: 0x20000000, Size: 0x00000a70, Max: 0x00007200, ABSOLUTE, COMPRESSED[0x00000020])
Base Addr Size Type Attr Idx E Section Name Object
0x20000000 0x00000004 Data RW 1454 .data mc_w.l(stdout.o)
0x20000004 0x000000e8 Data RW 139 .data.CAN0_transmiter Can.o
0x200000ec 0x00000004 Data RW 857 .data.SystemCoreClock system_gd32c10x.o
0x200000f0 0x00000004 Data RW 1302 .data.__cxa_terminate_handler libcppabi_wx.l(cxa_default_handlers.cpp.o)
0x200000f4 0x00000004 PAD
0x200000f8 0x00000004 Zero RW 105 .bss._ZGVZN10OTAHandler7processEvE4zero OTA.o
0x200000fc 0x00000004 Zero RW 33 .bss._ZL5delay systick.o
0x20000100 0x0000000c Zero RW 1311 .bss._ZN10__cxxabiv1L10eh_globalsE libcppabi_wx.l(cxa_exception_storage.cpp.o)
0x2000010c 0x00000001 Zero RW 104 .bss._ZZN10OTAHandler7processEvE4zero OTA.o
0x2000010d 0x00000003 PAD
0x20000110 0x00000008 Zero RW 142 .bss.can_rx_buffer Can.o
0x20000118 0x00000008 Zero RW 143 .bss.can_tx_buffer Can.o
0x20000120 0x0000001c Zero RW 140 .bss.dma_rx_parameter Can.o
0x2000013c 0x0000001c Zero RW 141 .bss.dma_tx_parameter Can.o
0x20000158 0x00000010 Zero RW 103 .bss.ota OTA.o
0x20000168 0x00000800 Zero RW 842 STACK startup_gd32c10x.o
0x20000000 0x00000004 Data RW 1502 .data mc_w.l(stdout.o)
0x20000004 0x000000e8 Data RW 194 .data.CAN0_transmiter Can.o
0x200000ec 0x00000004 Data RW 912 .data.SystemCoreClock system_gd32c10x.o
0x200000f0 0x00000004 Data RW 1350 .data.__cxa_terminate_handler libcppabi_wx.l(cxa_default_handlers.cpp.o)
0x200000f4 0x0000011c Data RW 155 .data.ota OTA.o
0x20000210 0x00000004 Zero RW 79 .bss._ZL5delay systick.o
0x20000214 0x0000000c Zero RW 1359 .bss._ZN10__cxxabiv1L10eh_globalsE libcppabi_wx.l(cxa_exception_storage.cpp.o)
0x20000220 0x00000001 Zero RW 156 .bss._ZZN10OTAHandler7processEvE4zero OTA.o
0x20000221 0x00000007 PAD
0x20000228 0x00000008 Zero RW 197 .bss.can_rx_buffer Can.o
0x20000230 0x00000008 Zero RW 198 .bss.can_tx_buffer Can.o
0x20000238 0x0000001c Zero RW 195 .bss.dma_rx_parameter Can.o
0x20000254 0x0000001c Zero RW 196 .bss.dma_tx_parameter Can.o
0x20000270 0x00000800 Zero RW 897 STACK startup_gd32c10x.o
Execution Region ARM_LIB_HEAP (Base: 0x20000968, Size: 0x00000c00, Max: 0x00000c00, ABSOLUTE)
Execution Region ARM_LIB_HEAP (Base: 0x20000a70, Size: 0x00000c00, Max: 0x00000c00, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x20000968 0x00000c00 Zero RW 1 ARM_LIB_HEAP.bss anon$$obj.o
0x20000a70 0x00000c00 Zero RW 1 ARM_LIB_HEAP.bss anon$$obj.o
Execution Region ARM_LIB_STACK (Base: 0x20007e00, Size: 0x00000200, Max: 0x00000200, ABSOLUTE)
File diff suppressed because it is too large Load Diff
@@ -5,6 +5,12 @@
"file": "G:\\Robot_v2\\BOOT\\Robot_V2\\main.cpp",
"output": "CMakeFiles\\Group_Source_Files.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\main.o"
},
{
"directory": "G:/Robot_v2/BOOT/tmp/1",
"command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_Source_Files.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\aes128.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\aes128.cpp",
"file": "G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\aes128.cpp",
"output": "CMakeFiles\\Group_Source_Files.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\aes128.o"
},
{
"directory": "G:/Robot_v2/BOOT/tmp/1",
"command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\systick.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\systick.cpp",
+30 -15
View File
@@ -9,20 +9,35 @@
322 422 7883668898391400 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch b54a62060b325746
422 9179 7883668985966322 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure 708efa7dee4d8c45
422 9179 7883668985966322 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure 708efa7dee4d8c45
13 429 7883895993327684 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build c3a3e5728b3e60b8
16 115 7889058218052152 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build c3a3e5728b3e60b8
441 553 7883669975311345 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes 9db191f9941f966f
13 429 7883895993327684 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf c3a3e5728b3e60b8
13 429 7883895993327684 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.hex c3a3e5728b3e60b8
13 429 7883895993327684 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf.map c3a3e5728b3e60b8
839 1004 7883896002827735 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done 39cd38b08f3cacb9
731 839 7883896001185719 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test 57275ea8426097a0
13 429 7883895993327684 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build c3a3e5728b3e60b8
16 115 7889058218052152 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf c3a3e5728b3e60b8
16 115 7889058218052152 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.hex c3a3e5728b3e60b8
16 115 7889058218052152 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf.map c3a3e5728b3e60b8
407 516 7889058222828813 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done 39cd38b08f3cacb9
329 407 7889058221742405 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test 57275ea8426097a0
16 115 7889058218052152 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build c3a3e5728b3e60b8
441 553 7883669975311345 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes 9db191f9941f966f
429 671 7883895997486268 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database 206b709820348205
429 671 7883895997486268 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database 206b709820348205
671 731 7883895999907919 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-install 66d6e5c354af78e4
671 731 7883895999907919 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-install 66d6e5c354af78e4
731 839 7883896001185719 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test 57275ea8426097a0
839 1004 7883896002827735 CMakeFiles/Robot_V2.Release+GD32C103CB-complete 39cd38b08f3cacb9
839 1004 7883896002827735 G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-complete 39cd38b08f3cacb9
839 1004 7883896002827735 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done 39cd38b08f3cacb9
115 283 7889058219043466 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database 206b709820348205
115 283 7889058219043466 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database 206b709820348205
283 329 7889058220722009 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-install 66d6e5c354af78e4
283 329 7889058220722009 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-install 66d6e5c354af78e4
329 407 7889058221742405 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test 57275ea8426097a0
407 516 7889058222828813 CMakeFiles/Robot_V2.Release+GD32C103CB-complete 39cd38b08f3cacb9
407 516 7889058222828813 G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-complete 39cd38b08f3cacb9
407 516 7889058222828813 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done 39cd38b08f3cacb9
16 471 7889059150268053 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build c3a3e5728b3e60b8
16 471 7889059150268053 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf c3a3e5728b3e60b8
16 471 7889059150268053 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.hex c3a3e5728b3e60b8
16 471 7889059150268053 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf.map c3a3e5728b3e60b8
16 471 7889059150268053 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build c3a3e5728b3e60b8
471 680 7889059154820695 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database 206b709820348205
471 680 7889059154820695 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database 206b709820348205
680 726 7889059156906569 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-install 66d6e5c354af78e4
680 726 7889059156906569 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-install 66d6e5c354af78e4
726 809 7889059157974137 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test 57275ea8426097a0
726 809 7889059157974137 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test 57275ea8426097a0
809 935 7889059159195145 CMakeFiles/Robot_V2.Release+GD32C103CB-complete 39cd38b08f3cacb9
809 935 7889059159195145 Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done 39cd38b08f3cacb9
809 935 7889059159195145 G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-complete 39cd38b08f3cacb9
809 935 7889059159195145 G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done 39cd38b08f3cacb9
BIN
View File
Binary file not shown.
+72 -31
View File
@@ -1,45 +1,86 @@
# ninja log v6
21 125 7883894964473103 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
12 211 7888233523208084 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
66 244 7883669850223131 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.o 77d2407664c0b50e
16 228 7883865332915349 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/initial.o 671120909b55a6ec
15 227 7883870843336311 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/systick.o 90049e3a9997d47e
23 132 7887310985859793 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/initial.o 671120909b55a6ec
16 241 7888233523249309 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/systick.o 90049e3a9997d47e
16 346 7886528851179878 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/sys/aes128.o de648e3137990e90
38 216 7883669849948685 CMakeFiles/GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.o 9a409ccbbaf0b506
49 218 7883669850060822 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.o afbddcf2f39ba5cd
15 123 7883894424171514 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
45 217 7883669850019389 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.o 67890dbd6b26def8
27 233 7888111179322586 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.o 67890dbd6b26def8
16 89 7889045342326772 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
75 247 7883669850317172 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.o 249b986db23681a2
57 233 7883669850137475 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.o dc69558be82ddab3
25 147 7883894964521073 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
11 170 7889046213230158 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
84 295 7883669850409328 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.o 8a38055acf3e9414
79 254 7883669850363588 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.o 90d7d435f1eb4630
53 264 7883669850099005 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.o d976b2f727d5d643
79 274 7883668987832296 CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.o 7333d2a666947fb3
70 266 7883669850273764 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.o 54f1765925ee6320
89 282 7883669850457885 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.o 25d66ba79c0b0dee
94 283 7883669850513392 CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.o 59beee78be430f18
19 235 7887309933117156 CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.o 59beee78be430f18
42 319 7883669849980565 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.o faa264156fd20815
62 379 7883669850185622 CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.o bf3ed2250296db4a
18 291 7883870843367542 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o b46fd0fc5d6515ff
29 160 7883894964555573 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
161 315 7883894967031924 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 66e252b5d299850c
161 315 7883894967031924 ac6_linker_script.sct 66e252b5d299850c
161 315 7883894967031924 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 66e252b5d299850c
15 123 7883894424171514 CMakeFiles/database cd32a3f4a99f5b2a
29 138 7883894968555254 CMakeFiles/database cd32a3f4a99f5b2a
29 138 7883894968555254 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
12 112 7883895484902550 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
112 270 7883895487072556 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 66e252b5d299850c
112 270 7883895487072556 ac6_linker_script.sct 66e252b5d299850c
112 270 7883895487072556 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 66e252b5d299850c
16 134 7883895488503087 CMakeFiles/database cd32a3f4a99f5b2a
16 134 7883895488503087 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
12 114 7883895994199452 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
15 145 7883895994240849 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
145 298 7883895996710812 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 66e252b5d299850c
145 298 7883895996710812 ac6_linker_script.sct 66e252b5d299850c
145 298 7883895996710812 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 66e252b5d299850c
15 124 7883895998026886 CMakeFiles/database cd32a3f4a99f5b2a
15 124 7883895998026886 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
35 1000 7884702065703500 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
293 1080 7884702068279578 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
290 1084 7884702068246137 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
19 308 7888233523270727 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o b46fd0fc5d6515ff
25 274 7888233523337014 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
170 338 7889046216052953 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 623ca12fbe475071
170 338 7889046216052953 ac6_linker_script.sct 623ca12fbe475071
170 338 7889046216052953 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 623ca12fbe475071
16 89 7889045342326772 CMakeFiles/database cd32a3f4a99f5b2a
10 4214 7885542907856565 build.ninja d9a30fa45660d8a5
16 90 7889046217300311 CMakeFiles/database cd32a3f4a99f5b2a
16 90 7889046217300311 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
12 208 7889054158176601 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
20 268 7889054158250360 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
17 274 7889054158223257 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
5 138 7889054867059399 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
12 156 7889054867132651 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
9 165 7889054867106034 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
165 344 7889054869923167 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 623ca12fbe475071
165 344 7889054869923167 ac6_linker_script.sct 623ca12fbe475071
165 344 7889054869923167 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 623ca12fbe475071
15 91 7889054871246783 CMakeFiles/database cd32a3f4a99f5b2a
15 91 7889054871246783 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
11 133 7889055524491562 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
18 158 7889055524565196 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
15 164 7889055524538110 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
165 343 7889055527288151 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 623ca12fbe475071
165 343 7889055527288151 ac6_linker_script.sct 623ca12fbe475071
165 343 7889055527288151 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 623ca12fbe475071
16 99 7889055528640625 CMakeFiles/database cd32a3f4a99f5b2a
16 99 7889055528640625 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
12 141 7889056998090449 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
20 174 7889056998168251 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
16 178 7889056998136051 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
178 353 7889057001052221 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 623ca12fbe475071
178 353 7889057001052221 ac6_linker_script.sct 623ca12fbe475071
178 353 7889057001052221 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 623ca12fbe475071
16 100 7889057002315539 CMakeFiles/database cd32a3f4a99f5b2a
16 100 7889057002315539 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
11 164 7889057323015023 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
164 337 7889057325833997 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 623ca12fbe475071
164 337 7889057325833997 ac6_linker_script.sct 623ca12fbe475071
164 337 7889057325833997 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 623ca12fbe475071
16 92 7889057327081778 CMakeFiles/database cd32a3f4a99f5b2a
16 92 7889057327081778 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
8 126 7889058182384951 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/systick.o 90049e3a9997d47e
4 136 7889058182338939 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
17 160 7889058182472191 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
14 169 7889058182445145 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
11 193 7889058182413025 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o b46fd0fc5d6515ff
193 358 7889058185467252 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 623ca12fbe475071
193 358 7889058185467252 ac6_linker_script.sct 623ca12fbe475071
193 358 7889058185467252 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 623ca12fbe475071
15 90 7889058186662907 CMakeFiles/database cd32a3f4a99f5b2a
15 90 7889058186662907 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
3 81 7889058219486129 CMakeFiles/database cd32a3f4a99f5b2a
3 81 7889058219486129 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
15 133 7889059151041366 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/systick.o 90049e3a9997d47e
11 146 7889059151001237 CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o a1e7d66abb20e63f
23 170 7889059151128645 CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o 45fb475e6531516a
20 175 7889059151094896 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o d3ceecf5eb5da62f
17 200 7889059151068007 CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o b46fd0fc5d6515ff
200 364 7889059154121237 G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf 623ca12fbe475071
200 364 7889059154121237 ac6_linker_script.sct 623ca12fbe475071
200 364 7889059154121237 G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct 623ca12fbe475071
20 108 7889059155554497 CMakeFiles/database cd32a3f4a99f5b2a
20 108 7889059155554497 G:/Robot_v2/BOOT/tmp/1/CMakeFiles/database cd32a3f4a99f5b2a
-2
View File
@@ -329,8 +329,6 @@ CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
//Platform information initialized
CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
//ADVANCED property for variable: CMAKE_RANLIB
CMAKE_RANLIB-ADVANCED:INTERNAL=1
//noop for ranlib
CMAKE_RANLIB:INTERNAL=:
//ADVANCED property for variable: CMAKE_READELF
+14 -49
View File
File diff suppressed because one or more lines are too long
+6
View File
@@ -5,6 +5,12 @@
"file": "G:\\Robot_v2\\BOOT\\Robot_V2\\main.cpp",
"output": "CMakeFiles\\Group_Source_Files.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\main.o"
},
{
"directory": "G:/Robot_v2/BOOT/tmp/1",
"command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_Source_Files.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\aes128.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\aes128.cpp",
"file": "G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\aes128.cpp",
"output": "CMakeFiles\\Group_Source_Files.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\aes128.o"
},
{
"directory": "G:/Robot_v2/BOOT/tmp/1",
"command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\systick.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\systick.cpp",
@@ -3,10 +3,12 @@
# group Source Files
add_library(Group_Source_Files OBJECT
"${SOLUTION_ROOT}/Robot_V2/main.cpp"
"${SOLUTION_ROOT}/Robot_V2/sys/aes128.cpp"
)
target_include_directories(Group_Source_Files PUBLIC
$<TARGET_PROPERTY:${CONTEXT},INTERFACE_INCLUDE_DIRECTORIES>
"${SOLUTION_ROOT}/Robot_V2"
"${SOLUTION_ROOT}/Robot_V2/sys"
)
target_compile_definitions(Group_Source_Files PUBLIC
$<TARGET_PROPERTY:${CONTEXT},INTERFACE_COMPILE_DEFINITIONS>