реклама на сайте
подробности

 
 
> отследить изменение переменной.
Jenya7
сообщение Dec 15 2015, 10:14
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



есть пакет с данными uint8_t packet[20] . переменная uint32_t занимает 4 байта. соответственно если я хочу посмотреть изменилась ли переменная в следующей посылке я могу сделать так
Код
if (new_packet[0] != old_packet[0] || new_packet[1] != old_packet[1] || new_packet[2] != old_packet[2] || new_packet[3] != old_packet[3])

или так
Код
if(memcmp(new_packet, old_packet, 4) != 0)

вопрос какой способ быстрее?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jenya7
сообщение Dec 16 2015, 08:45
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



сделал листинг ради интереса.
Код
if (new_packet[4] != old_packet[4] || new_packet[5] != old_packet[5] || new_packet[6] != old_packet[6] || new_packet[7] != old_packet[7])

    1db8:    7938          ldrb    r0, [r7, #4]
    1dba:    7933          ldrb    r3, [r6, #4]
    1dbc:    4298          cmp    r0, r3
    1dbe:    d10b          bne.n    1dd8 <PARSER_ParseBlePacket+0x458>
    1dc0:    797a          ldrb    r2, [r7, #5]
    1dc2:    7971          ldrb    r1, [r6, #5]
    1dc4:    428a          cmp    r2, r1
    1dc6:    d107          bne.n    1dd8 <PARSER_ParseBlePacket+0x458>
    1dc8:    79bd          ldrb    r5, [r7, #6]
    1dca:    79b0          ldrb    r0, [r6, #6]
    1dcc:    4285          cmp    r5, r0
    1dce:    d103          bne.n    1dd8 <PARSER_ParseBlePacket+0x458>
    1dd0:    79fa          ldrb    r2, [r7, #7]
    1dd2:    79f3          ldrb    r3, [r6, #7]
    1dd4:    429a          cmp    r2, r3
    1dd6:    d010          beq.n    1dfa <PARSER_ParseBlePacket+0x47a>


    if(*((uint32_t*)&new_packet[4]) != *((uint32_t*)&old_packet[4]))

    1db8:    6878          ldr    r0, [r7, #4]
    1dba:    6873          ldr    r3, [r6, #4]
    1dbc:    4298          cmp    r0, r3
    1dbe:    d010          beq.n    1de2 <PARSER_ParseBlePacket+0x462>


    if(memcmp(&new_packet[4],&old_packet[4],4) != 0)

    1a48:    1d3c          adds    r4, r7, #4
    1a4a:    4620          mov    r0, r4
    1a4c:    1d31          adds    r1, r6, #4
    1a4e:    2204          movs    r2, #4
    1a50:    f005 f8f8     bl    6c44 <memcmp>
    1a54:    b160          cbz    r0, 1a70 <PARSER_ParseBlePacket+0xf0>


if(*((uint32_t*)&new_packet[4]) != *((uint32_t*)&old_packet[4])) рулит. в принципе это частный случай более общего - ((my_struct *) my_arr)->value_32bit

кстати я тут подумал
такую запись
Код
tempParam.maxFlowRate = (uint32_t)new_packet[0]+((uint32_t)new_packet[1]<<8)+((uint32_t)new_packet[2]<<16)+((uint32_t)new_packet[3]<<24);


можно заменить на
Код
tempParam.maxFlowRate = *((uint32_t*)&new_packet[0]);
или
tempParam.maxFlowRate = ((my_struct *) my_arr)->value_32bit


или я не прав?

вот листинг
Код
tempParam.maxFlowRate = (uint32_t)new_packet[3]+((uint32_t)new_packet[2]<<8)+((uint32_t)new_packet[1]<<16)+((uint32_t)new_packet[0]<<24);
    1e32:    7878          ldrb    r0, [r7, #1]
    1e34:    78bc          ldrb    r4, [r7, #2]
    1e36:    0403          lsls    r3, r0, #16
    1e38:    78fa          ldrb    r2, [r7, #3]
    1e3a:    eb03 2104     add.w    r1, r3, r4, lsl #8
    1e3e:    7838          ldrb    r0, [r7, #0]
    1e40:    188c          adds    r4, r1, r2
    1e42:    eb04 6300     add.w    r3, r4, r0, lsl #24
    1e46:    9317          str    r3, [sp, #92]; 0x5c

tempParam.maxFlowRate = *((uint32_t*)&new_packet[0]);
    1998:    683b          ldr    r3, [r7, #0]
    199c:    9317          str    r3, [sp, #92]; 0x5c

нехилая разница.

Сообщение отредактировал Jenya7 - Dec 16 2015, 09:14
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   отследить изменение переменной.   Dec 15 2015, 10:14
- - zltigo   QUOTE (Jenya7 @ Dec 15 2015, 12:14) вопро...   Dec 15 2015, 10:18
|- - Jenya7   Цитата(zltigo @ Dec 15 2015, 16:18) Один ...   Dec 15 2015, 11:09
|- - msalov   Цитата(Jenya7 @ Dec 15 2015, 14:09) так ч...   Dec 15 2015, 11:33
- - Dog Pawlowa   Ну, для начала желательно знать, что за ядро. То,...   Dec 15 2015, 11:32
|- - Jenya7   Цитата(Dog Pawlowa @ Dec 15 2015, 17:32) ...   Dec 15 2015, 11:37
||- - msalov   Цитата(Jenya7 @ Dec 15 2015, 14:37) функц...   Dec 15 2015, 11:41
||- - Jenya7   Цитата(msalov @ Dec 15 2015, 17:41) Адрес...   Dec 15 2015, 11:45
||- - zltigo   QUOTE (Jenya7 @ Dec 15 2015, 13:45) допус...   Dec 15 2015, 12:00
||- - Jenya7   Цитата(zltigo @ Dec 15 2015, 18:00) Нет, ...   Dec 15 2015, 12:07
||- - zltigo   QUOTE (Jenya7 @ Dec 15 2015, 14:07) какая...   Dec 15 2015, 12:18
||- - Jenya7   Цитата(zltigo @ Dec 15 2015, 18:18) 1) Не...   Dec 15 2015, 12:22
||- - zltigo   QUOTE (Jenya7 @ Dec 15 2015, 14:22) и все...   Dec 15 2015, 12:29
||- - msalov   Цитата(Jenya7 @ Dec 15 2015, 15:22) и все...   Dec 15 2015, 12:29
|- - zltigo   QUOTE (Dog Pawlowa @ Dec 15 2015, 13:32) ...   Dec 15 2015, 11:54
|- - Jenya7   Цитата(zltigo @ Dec 15 2015, 17:54) Надо,...   Dec 15 2015, 11:56
- - XVR   Цитатакакая структура. у меня функция принимает ма...   Dec 15 2015, 12:15
- - Jenya7   а что можно прямо так ? (my_struct *) my_arr   Dec 15 2015, 13:39
|- - zltigo   QUOTE (Jenya7 @ Dec 15 2015, 15:39) а что...   Dec 15 2015, 14:48
|- - Jenya7   понял.спасибо.   Dec 15 2015, 14:52
|- - zltigo   QUOTE (Jenya7 @ Dec 16 2015, 10:45) можно...   Dec 16 2015, 11:07
- - XVR   Цитатаif(*((uint32_t*)&new_packet[4]) != *...   Dec 16 2015, 11:09
|- - zltigo   QUOTE (XVR @ Dec 16 2015, 13:09) На ARM э...   Dec 16 2015, 11:18
|- - CrimsonPig   Цитата(zltigo @ Dec 16 2015, 11:18) Не об...   Dec 16 2015, 15:00
|- - zltigo   QUOTE (CrimsonPig @ Dec 16 2015, 17:00) ...   Dec 16 2015, 15:08
|- - CrimsonPig   Цитата(zltigo @ Dec 16 2015, 15:08) К чем...   Dec 16 2015, 15:25
||- - zltigo   QUOTE (CrimsonPig @ Dec 16 2015, 17:25) Н...   Dec 16 2015, 15:46
|- - XVR   Цитата(zltigo @ Dec 16 2015, 18:08) Для н...   Dec 16 2015, 15:30
|- - zltigo   QUOTE (XVR @ Dec 16 2015, 17:30) Не всегд...   Dec 16 2015, 15:38
|- - CrimsonPig   Цитата(zltigo @ Dec 16 2015, 15:38) Догов...   Dec 16 2015, 15:43
- - XVR   gcc 4.8.2 не знает как инлайнить memcmp ( http://g...   Dec 17 2015, 11:53


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 16:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01825 секунд с 7
ELECTRONIX ©2004-2016