|
|
  |
Работа с массивом. |
|
|
|
Mar 24 2016, 06:41
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Есть два варианта. Первый Код void ParseGeneralParam(uint8_t *data_packet) { data_packet[1] = aaa; data_packet[2] = bbb; data_packet[3] = ccc; } и потом передаем глобальный массив Код uint8_t glob_arr[20]; ParseGeneralParam(glob_arr); Второй - сразу передаем глобальный массив Код void ParseGeneralParam(void) { glob_arr[1] = aaa; glob_arr[2] = bbb; glob_arr[3] = ccc; } первый вариант более генерик. не привязан к конкретному массиву поэтому легко переносимый. но с точки зрения скорости - тратит ли первый вариант лишние такты на передачу адреса?
|
|
|
|
|
Mar 24 2016, 14:13
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата(Jenya7) тратит ли первый вариант лишние такты на передачу адреса? Выкиньте эти мысли из головы...
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Mar 24 2016, 14:21
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(skripach @ Mar 24 2016, 19:13)  Выкиньте эти мысли из головы... у меня прибор на батарейке. скорость мне очень важна. по моему до меня дошел посыл Сергея. Код union two_byte { uint16_t b; uint8_t b1; uint8_t b2; }; union four_byte { uint32_t b; uint8_t b1; uint8_t b2; uint8_t b3; uint8_t b4; }; struct sPacket { uint8_t var1; union two_byte var2; union four_byte var3; };
Сообщение отредактировал Jenya7 - Mar 24 2016, 16:12
|
|
|
|
|
Mar 24 2016, 16:35
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Jenya7 @ Mar 24 2016, 15:59)  это как?  у меня не все данные размером 1 байт. есть 2-4 байта. Примерно так: Код enum opcode { cmd1_name = 0, cmd2_name = 0x57, cmd3_name = 0xFE, };
typedef struct { opcode Opcode; union { struct { uint8_t Param1_name; uint16_t Param2_name; } cmd1_param;
struct { uint16_t Param1_name; uint8_t Param2_name; } cmd2_param; struct { uint8_t Param1_name; } cmd3_param; }; } command_t __attribute__((packed));
extern void api_func1(uint8_t * data);
void Test() { command_t Commad;
Command.Opcode = cmd2_name; Command.cmd2_param.Param1_name = 45678; Command.cmd2_param.Param2_name = 123; api_func1((uint8_t *)&Command); } Цитата(Jenya7 @ Mar 24 2016, 16:21)  по моему до меня дошел посыл Сергея. Не совсем, но ход вашей мысли мне уже нравится.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|