jenya7 0 28 февраля, 2018 Опубликовано 28 февраля, 2018 (изменено) · Жалоба Поправте если ошибаюсь. Если я передам структуру by value void MyFunc (MyStruct my_struct) то копия ляжет на стак и с ней ф-ция будет работать. А если я передам структуру by reference void MyFunc (MyStruct *my_struct) то ф-ция будет работать непосредственно со структурой. А что со скоростью доступа - быстрее by value? Изменено 28 февраля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба то копия ляжет на стак и с ней ф-ция будет работать. Не факт. Зависит от размера структуры. Если структура влезает в два регистра, то IAR вроде как может её в регистрах передавать. А что со скоростью доступа - быстрее by value? "Открыть асм и посмотреть" - так точно будет быстрее чем даже написать в форум. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 февраля, 2018 Опубликовано 28 февраля, 2018 (изменено) · Жалоба Не факт. Зависит от размера структуры. Если структура влезает в два регистра, то IAR вроде как может её в регистрах передавать. "Открыть асм и посмотреть" - так точно будет быстрее чем даже написать в форум. :laughing: структура 200-300 байт. про асм совсем забыл. посчитать инструкции? Изменено 28 февраля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба про асм совсем забыл. посчитать инструкции? Например так. А в IAR достаточно просто открыть окошко с регистрами и посмотреть на регистр CCSTEP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 февраля, 2018 Опубликовано 28 февраля, 2018 (изменено) · Жалоба Например так. А в IAR достаточно просто открыть окошко с регистрами и посмотреть на регистр CCSTEP. да. есть такой регистр. а что он показывает? Изменено 28 февраля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба да. есть такой регистр. а что он показывает? А Вы попробуйте пошагать по инструкциям и функциям и понаблюдать за ним. Узнаете много нового. :laughing: Только предварительно полезно установить галку на пункте "запрещать прерывания при шагании" в пункте меню "J-Link" IAR-а. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 февраля, 2018 Опубликовано 28 февраля, 2018 (изменено) · Жалоба А Вы попробуйте пошагать по инструкциям и функциям и понаблюдать за ним. Узнаете много нового. :laughing: Только предварительно полезно установить галку на пункте "запрещать прерывания при шагании" в пункте меню "J-Link" IAR-а. а у меня ST-LINK там нет такого CCSTEP все время 0. Изменено 28 февраля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба CCSTEP все время 0. Печалька. J-Link - круче! :) Регистр этот показывает сколько прошло тактов CPU за время шага. Он очень пользителен для профилирования кода. Можно попробовать его вбить вручную в окно Watch: DWT.CYCCNT. Только предварительно его надо включить в модуле DWT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 февраля, 2018 Опубликовано 28 февраля, 2018 (изменено) · Жалоба Печалька. J-Link - круче! :) Регистр этот показывает сколько прошло тактов CPU за время шага. Он очень пользителен для профилирования кода. Можно попробовать его вбить вручную в окно Watch: DWT.CYCCNT. Только предварительно его надо включить в модуле DWT. ой точно. можно ж на таймере такты отсчитать. спасибо. а как все таки предпочтительней передавать - by value или by reference? или тут нет однозначного ответа? при условии что поля структуры не модифицируются. Изменено 28 февраля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба ой точно. можно ж на таймере такты отсчитать. спасибо. а как все таки предпочтительней передавать - by value или by reference? или тут нет однозначного ответа? при условии что поля структуры не модифицируются. По значению, это что - Вы все 300 байт на стек копировать собрались??? :01: А места там хоть хватит? Естественно быстрее передать указатель, чем копировать всё на стек. А если структура внутри не изменяется, то и в объявлении должно фигурировать const. а у меня ST-LINK там нет такого PS: Вообще DWT.CYCCNT находится в ядре. Т.е. - не зависит от используемого эмулятора. Да и у Вас он показывается, только всё время ==0. Значит видимо выключен. Нужно его просто включить, найдя соответствующий бит в регистрах конфигурирования DWT. А J-Link видимо сам его включает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба По значению, это что - Вы все 300 байт на стек копировать собрались??? :01: А места там хоть хватит? Естественно быстрее передать указатель, чем копировать всё на стек. А если структура внутри не изменяется, то и в объявлении должно фигурировать const. PS: Вообще DWT.CYCCNT находится в ядре. Т.е. - не зависит от используемого эмулятора. Да и у Вас он показывается, только всё время ==0. Значит видимо выключен. Нужно его просто включить, найдя соответствующий бит в регистрах конфигурирования DWT. А J-Link видимо сам его включает. я понял. стек у меня на всякий случай 2К. а структура в этой ф-ции не модифицируется, а в другом месте поля могут измениться. DWT таки выключен, надо вручную включать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба Можно просто запустить в симуляторе и посмотреть в окне Disassembler. Вопрос просто не возник бы после этого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба Можно просто запустить в симуляторе и посмотреть в окне Disassembler. Вопрос просто не возник бы после этого. тоже идея. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба структура в этой ф-ции не модифицируется, а в другом месте поля могут измениться. Если структура и стек расположены в памяти с одинаковым доступом, и если структура во время работы вашей функции в другом месте не меняется (в прерывании или из-за работы РТОС), то ессно нужно передавать указатель и работать с оригиналом. Если структура может меняться, то нужно обеспечивать разграничение доступа. Причем простая передача копии структуры в функцию этой проблемы не решает. А если доступ к стеку и памяти структуры разный по времени, то тут уже считать нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 28 февраля, 2018 Опубликовано 28 февраля, 2018 · Жалоба то копия ляжет на стак и с ней ф-ция будет работать. Ключевое слово копия. На копирование необходимо затратить какое-то время. А передача указателя - вычисление адреса структуры произойдет на этапе компиляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться