|
Передача структуры в функцию. |
|
|
|
Feb 28 2018, 14:52
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Поправте если ошибаюсь. Если я передам структуру by value Код void MyFunc (MyStruct my_struct) то копия ляжет на стак и с ней ф-ция будет работать. А если я передам структуру by reference Код void MyFunc (MyStruct *my_struct) то ф-ция будет работать непосредственно со структурой. А что со скоростью доступа - быстрее by value?
Сообщение отредактировал Jenya7 - Feb 28 2018, 14:52
|
|
|
|
|
 |
Ответов
|
Feb 28 2018, 15:38
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(jcxz @ Feb 28 2018, 20:26)  Печалька. J-Link - круче!  Регистр этот показывает сколько прошло тактов CPU за время шага. Он очень пользителен для профилирования кода. Можно попробовать его вбить вручную в окно Watch: DWT.CYCCNT. Только предварительно его надо включить в модуле DWT. ой точно. можно ж на таймере такты отсчитать. спасибо. а как все таки предпочтительней передавать - by value или by reference? или тут нет однозначного ответа? при условии что поля структуры не модифицируются.
Сообщение отредактировал Jenya7 - Feb 28 2018, 15:39
|
|
|
|
|
Feb 28 2018, 15:56
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Jenya7 @ Feb 28 2018, 17:38)  ой точно. можно ж на таймере такты отсчитать. спасибо. а как все таки предпочтительней передавать - by value или by reference? или тут нет однозначного ответа? при условии что поля структуры не модифицируются. По значению, это что - Вы все 300 байт на стек копировать собрались??? А места там хоть хватит? Естественно быстрее передать указатель, чем копировать всё на стек. А если структура внутри не изменяется, то и в объявлении должно фигурировать const. Цитата(Jenya7 @ Feb 28 2018, 17:19)  а у меня ST-LINK там нет такого PS: Вообще DWT.CYCCNT находится в ядре. Т.е. - не зависит от используемого эмулятора. Да и у Вас он показывается, только всё время ==0. Значит видимо выключен. Нужно его просто включить, найдя соответствующий бит в регистрах конфигурирования DWT. А J-Link видимо сам его включает.
|
|
|
|
|
Feb 28 2018, 16:18
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(jcxz @ Feb 28 2018, 20:56)  По значению, это что - Вы все 300 байт на стек копировать собрались??? А места там хоть хватит? Естественно быстрее передать указатель, чем копировать всё на стек. А если структура внутри не изменяется, то и в объявлении должно фигурировать const. PS: Вообще DWT.CYCCNT находится в ядре. Т.е. - не зависит от используемого эмулятора. Да и у Вас он показывается, только всё время ==0. Значит видимо выключен. Нужно его просто включить, найдя соответствующий бит в регистрах конфигурирования DWT. А J-Link видимо сам его включает. я понял. стек у меня на всякий случай 2К. а структура в этой ф-ции не модифицируется, а в другом месте поля могут измениться. DWT таки выключен, надо вручную включать.
|
|
|
|
Сообщений в этой теме
Jenya7 Передача структуры в функцию. Feb 28 2018, 14:52          Baser Цитата(Jenya7 @ Feb 28 2018, 18:18) струк... Feb 28 2018, 17:31 x893 Можно просто запустить в симуляторе и посмотреть в... Feb 28 2018, 16:42 Jenya7 Цитата(x893 @ Feb 28 2018, 21:42) Можно п... Feb 28 2018, 16:56 dimka76 Цитата(Jenya7 @ Feb 28 2018, 17:52) то ко... Feb 28 2018, 18:31 Unfog 1. Если нужно работать с копией: void foo(type obj... Mar 1 2018, 04:28 Jenya7 А если я передаю адрес объекта я могу в другой фун... Mar 1 2018, 05:56 Unfog Да, можно. Но нужно помнить про прерывания. Mar 1 2018, 06:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|