Jump to content

    

Выполнение ф-ций из ram

Recommended Posts

Arlleex
11 минут назад, AlexRayne сказал:

Иар не магический шар...

... однако автоматизированная среда разработки, которая вне зависимости от конкретных ситуативных оптимизаций компилятора и линковщика, а также неочевидных последствий такой оптимизации, проследит все зависимости и сделает все ок. А Вам, раз уж Вы считаете "простым делом" проследить все эти зависимости и закатывать солнце вручную, остается только пожелать удачи, когда при очередной пересборке что-то отъедет: опять часами искать эти функции и данные, которые попали "не туда":crazy:

У IAR __ramfunc штука удобная. В Keil такого нет, а жаль. Как в GCC - не в курсе.

Share this post


Link to post
Share on other sites

AlexRayne
2 минуты назад, Arlleex сказал:

однако автоматизированная среда разработки, которая вне зависимости от конкретных ситуативных оптимизаций компилятора и линковщика, а также неочевидных последствий такой оптимизации, проследит все зависимости и сделает все ок.

да ктобы спорил. но иар не всегда под рукой есть. у меня вот гнусный с, какие варианты предложите? 

Share this post


Link to post
Share on other sites

Arlleex
12 минут назад, AlexRayne сказал:

да ктобы спорил. но иар не всегда под рукой есть. у меня вот гнусный с, какие варианты предложите? 

А я Keil-ом пользуюсь. GCC не юзаю. Но, как уже сказал, в Keil-е нету такой фишки, как у IAR-а.

Свой вариант я уже предложил - если программа довольно сложная и выцыганить зависимости быстро не получится - она целиком летит в RAM.

Share this post


Link to post
Share on other sites

jcxz
50 минут назад, AlexRayne сказал:

конкретно в приведенном случае придется всю таблицу table000 в озу переложить.

"Всю" это сколько? Как размер определите?

А если определили даже и размер её = 100КБ? А ОЗУ всего = 64КБ. Как?

Share this post


Link to post
Share on other sites

AlexRayne
20 часов назад, jcxz сказал:

А если определили даже и размер её = 100КБ? А ОЗУ всего = 64КБ. Как?

тогда финита ля комедия.

А как ИАР это сможет разрулить?

20 часов назад, Arlleex сказал:

она целиком летит в RAM.

я редко работаю с контроллерами у которых ОЗУ не забивается данными под завязку. 

Share this post


Link to post
Share on other sites

jcxz
1 час назад, AlexRayne сказал:

А как ИАР это сможет разрулить?

У IAR-а: отдельно - чай, отдельно - сахар. А у вас - чай с сахаром.

Так кому легче отделить сахар от чая?

Share this post


Link to post
Share on other sites

AlexRayne
22 минуты назад, jcxz сказал:

У IAR-а: отдельно - чай, отдельно - сахар. А у вас - чай с сахаром.

довольно скупое объяснение, невкурил. можно подробнее? как ИАР ссылку на таблицу 100кБ локализует для ram-функции, в вашем примере?

 

Edited by AlexRayne

Share this post


Link to post
Share on other sites

x893
9 minutes ago, AlexRayne said:

как ИАР ссылку на таблицу 100кБ локализует для ram-функции

Точно так же как и для функции из флэш

Share this post


Link to post
Share on other sites

jcxz
19 часов назад, AlexRayne сказал:

довольно скупое объяснение, невкурил. можно подробнее? как ИАР ссылку на таблицу 100кБ локализует для ram-функции, в вашем примере?

IAR-у не нужно это делать. IAR (как и любой компилятор) умеет объединять константы (удаление дубликатов). 100КБ - это объединённый массив констант. Разных констант. То же самое с кодом - одинаковые участки могут быть объединены оптимизатором. А код, имеющий атрибут __ramfunc, не будет объединяться с кодом не имеющим такого атрибута. Аналогично и константы этого кода не будут объединяться.

Пытаться что-то выделить уже после объединения - это пытаться вычерпать сахар из чая.

Share this post


Link to post
Share on other sites

Darth Vader
4 часа назад, jcxz сказал:

А код, имеющий атрибут __ramfunc, не будет объединяться с кодом не имеющим такого атрибута.

А как поступит IAR, если аттрибутом __ramfunc будет помечена функция, принимающая параметр типа указатель на функцию, и вызывающая её по этому указателю?

Share this post


Link to post
Share on other sites

jcxz
5 минут назад, Darth Vader сказал:

А как поступит IAR, если аттрибутом __ramfunc будет помечена функция, принимающая параметр типа указатель на функцию, и вызывающая её по этому указателю?

Если указатель будет без __ramfunc, то по идее должен ругнуться.

Но зачем спрашивать? Просто попробуйте.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.