Я пытаюсь отправить максимум 8 байтов данных.Первые 4 байта всегда одинаковы и включают определенные команды и адрес.Последние 4 байта должны быть переменными.
Пока я использую этот подход.К сожалению, в этом случае мне сказали не использовать циклы for.
// Construct data
local_transmit_buffer[0] = EEPROM_CMD_WREN;
local_transmit_buffer[1] = EEPROM_CMD_WRITE;
local_transmit_buffer[2] = High(MSQ_Buffer.address);
local_transmit_buffer[3] = Low(MSQ_Buffer.address);
uint_fast8_t i = 0;
for(i = 0; i < MSQ_Buffer.byte_lenght || i < 4; i++){ // assign data
local_transmit_buffer[i + 4] = MSQ_Buffer.dataPointer[i];
}
Вот некоторый тестовый код, который я пытаюсь решить:
#include <stdio.h>
__UINT_FAST8_TYPE__ local_transmit_buffer[8];
__UINT_FAST8_TYPE__ MSQ_Buffer_data[8];
void print_local(){
for (int i = 0; i < 8; i++)
{
printf("%d ", local_transmit_buffer[i]);
}
printf("\n");
}
void print_msg(){
for (int i = 0; i < 8; i++)
{
printf("%d ", MSQ_Buffer_data[i]);
}
printf("\n");
}
int main(){
// assign all local values to 0
for (int i = 0; i < 8; i++)
{
local_transmit_buffer[i] = 0;
} print_local();
// assign all msg values to 1
for (int i = 0; i < 8; i++)
{
MSQ_Buffer_data[i] = i + 1;
} print_msg();
*(local_transmit_buffer + 3) = (__UINT_FAST32_TYPE__)MSQ_Buffer_data;
printf("\n");
print_local();
return 0;
}
Заполняются первые циклывверх local_transmit_buffer с 0 и MSQ_Buffer с 0,1,2, ... local_transmit_buffer -> 0 0 0 0 0 0 0 0 MSQ_Buffer_data -> 1 2 3 4 5 6 7 8
Теперь я хочуназначьте первые 4 значения MSQ_Buffer_data local_transmit_buffer следующим образом: local_transmit_buffer -> 0 0 0 0 1 2 3 4
Есть ли другой способ решения этой проблемы без использования циклов for или битового поля?
Решено: Я использовал функцию memcpy для решения моей проблемы
// uint_fast8_t i = 0;
// for(i = 0; i < MSQ_Buffer.byte_lenght || i < 4; i++){ // assign data
// local_transmit_buffer[i + 4] = MSQ_Buffer.dataPointer[i];
// }
// copy a defined number data from the message to the local buffer to send
memcpy(&local_transmit_buffer[4], &MSQ_Buffer.dataPointer, local_save_data_length);