Obam 30 30 июля, 2019 Опубликовано 30 июля, 2019 · Жалоба "IAR C/C++Development Guide", а для общей ориентировки "EmbeddedWorkbench IDE Guide". Всё что "...Reference Guide" - всё в жилу ;-) В C/C++DevGuide в части 2 "The linker configuration file" и "Section reference" это прям вот "по каким правилам будут определяться адреса", что самое занятное вы же их и будете себе устанавливать, а не "мифический" линкер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 30 июля, 2019 Опубликовано 30 июля, 2019 · Жалоба 18 minutes ago, Kalyan said: Давайте на главной странице большими буквами напишем "Читайте доки!!!" Ну вообще-то форум как раз не отменяет чтение документации. Из документации вы узнаете связанный, полный блок информации. На форуме вам подскажут только по конкретному случаю Но вы и будете владеть только этим конкретным случаем. Т.е. у вас не будет кругозора по теме. Впрочем, пересказывание известных фактов тоже вызывает раздражение. Обычно на форуме задают вопрос, когда что-то осталось непонятным уже после чтения документации. Простите, что написал вам это. Но подумал, что лишним не будет. 4 hours ago, Kalyan said: Можно ли заставить компилятор положить этот массив в начало или конец оперативной памяти? Конкретно этот вопрос на форуме поднимался "сотни раз". Достаточно просто поискать. Пример поиска. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 30 июля, 2019 Опубликовано 30 июля, 2019 · Жалоба 34 минуты назад, Kalyan сказал: Это же форум, на то он и придуман Это форум да, но форум профессионалов. А не детсадовская песочница. И вопросы типа "лень прочитать доку" - тут не приветствуются. Да и раздел "для начинающих" здесь в другом месте. Кроме того - вы утверждали что читали мануал, а судя по вашим вопросам - даже не открывали его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 30 июля, 2019 Опубликовано 30 июля, 2019 · Жалоба 1 час назад, Kalyan сказал: При сборке в моем проекте оно не работает. Заметил особенность - если приемный буфер этого протокола положить по младшим адресам - чудо, все работает )) Исходите из того, что в первом приближении порядок размещения зависит от фазы Луны. А доставшуюся по наследству реализацию надо исправить пока эффект стабильно повторяется. Потому что если этого не сделать сейчас - в дальнейшем этот код преподнесет вам еще множество неприятных сюрпризов. Лечите причину, а не симптомы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kalyan 0 30 июля, 2019 Опубликовано 30 июля, 2019 · Жалоба 2 hours ago, jcxz said: Это форум да, но форум профессионалов. А не детсадовская песочница. И вопросы типа "лень прочитать доку" - тут не приветствуются. Да и раздел "для начинающих" здесь в другом месте. Кроме того - вы утверждали что читали мануал, а судя по вашим вопросам - даже не открывали его. Я думаю Вы в корне не правы. Есть правила этого форума. Вот ссылкочка. В правилах не написано что это закрытый клуб професиональных дядек к которому нету доступа лицам коие такими не являются. На главной странице тоже нету предупреждений о запрете задавать те или иные вопросы (типо "Ламер - иди отсюдова! Не пиши здесь постов" и тд.). Согласитесь, ведь тогда упадет трафик и будут изымать плату за доступ к ресурсу. Это свободный ресурс, Вы не есть владельцем ресурса (я надеюсь) и у меня здесь столько же прав сколько и у Вас. Следовательно, должен быть конструктив, а не хамское отношение и попытка навязывать свои нарцисссические представления (так написано в правилах). Если вопрос уже здесь неоднократно обсуждался - заблокируйте мой пост с самого начала. Или же в пример могу привести http://www.cyberforum.ru. Там в такой ситуации не оскорбляют своего пользователя, а приводят ссылки на подобные темы. Модераторов прошу обратить внимание на нарушения правил данного форума, а именно - оскорбления в мой адрес. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 16 hours ago, Kalyan said: да, я понимаю. По наследству досталась реализация сериал протокола. При сборке в моем проекте оно не работает. Заметил особенность - если приемный буфер этого протокола положить по младшим адресам - чудо, все работает )). Вот мне и в самом деле интересно стало как заставить линкер разложить переменные разных модулей в том или ином порядке. Какие правила использует линкер для этого и тд. Это пляски с бубном. Правильные пацаны сначала находят первопричину, а потом её устраняют. Например, бывает DMA, и оно не в любой памяти работает. Или особо укуренная адресная арифметика. В общем, копайте отсюда и до обеда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kalyan 0 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 14 minutes ago, scifi said: Это пляски с бубном. Правильные пацаны сначала находят первопричину, а потом её устраняют. Например, бывает DMA, и оно не в любой памяти работает. Или особо укуренная адресная арифметика. В общем, копайте отсюда и до обеда. да, вы правы. Первопричина найдена. Это как раз таки и DMA. Теряются байты с потока. Идет поток байт, заполняется буфер, дма останавливается, перекидает их со своего буфера в логику, потом опять начинает складывать байты с потока. Это узкое место в реализации, и с увеличением адреса буфера происходить задержка перед следующим включением дма, и оно теряет несколько байт (1 байт) с потока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MasterElectric 0 31 июля, 2019 Опубликовано 31 июля, 2019 (изменено) · Жалоба Как величина адреса может повлиять на скорость включения ДМА? Ну это точно не то место Изменено 31 июля, 2019 пользователем MasterElectric Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 9 часов назад, Kalyan сказал: Теряются байты с потока. Идет поток байт, заполняется буфер, дма останавливается, перекидает их со своего буфера в логику, потом опять начинает складывать байты с потока. Это узкое место в реализации, и с увеличением адреса буфера происходить задержка перед следующим включением дма, и оно теряет несколько байт (1 байт) с потока. У DMA есть Circular mode и прерывания по заполнению половины буфера (HTIE: Half transfer interrupt enable) и всего буфера (TCIE: Transfer complete interrupt enable). С ними DMA запустив один раз можно потом вообще не трогать, только в прерываниях обрабатывать очередную половинку буфера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 2 августа, 2019 Опубликовано 2 августа, 2019 · Жалоба Походу, тому программисту, который после вас будет работать придётся ещё сложнее ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 2 августа, 2019 Опубликовано 2 августа, 2019 · Жалоба On 7/30/2019 at 6:28 PM, Kalyan said: При сборке в моем проекте оно не работает. Заметил особенность - если приемный буфер этого протокола положить по младшим адресам - чудо, все работает )) Конечно деталей мало нужно больше, но мне кажется это просто выход за границы буфера. Как организован прием? On 7/30/2019 at 6:28 PM, Kalyan said: Вот мне и в самом деле интересно стало как заставить линкер разложить переменные разных модулей в том или ином порядке. Какие правила использует линкер для этого и тд. Линкер следует правилам описанным в линкер скрипте(где-то это называется скаттер файл) который формируется Вами(разработчиком), в простых случаях используется стандартный линкер скрипт где описана все FLASH, RAM и прочая память + ее возможности read\write\executeble. Так же, в линкер скрипте присутствует описание секций(регионов\сегментов) которые размещают в соответствующей памяти. Например, секция .text, данная секция содержит код программы и это все складывается во FLASH память, есть такие секции .data или .cstack или .bss или .ZI, в данные секции помещаются определенные типы R\W переменных а секции размещаются в RAM. Назначение и название секций могут быть разные в зависимости от используемой системы сборки(gcc, armcc, iar, clang). Главное понимать что определенный тип данных лежит в той или иной области. И никогда нельзя сказать какая глобальная переменная будет лежать реньше\позже другой так это уже зависит от реализации самого линкера и таких опций как оптимизация, упаковка, выравнивание данных и пр. А вот про назначение секций, боюсь я тоже отправлю Вас почитать manual, тут двумя словами не обойтись. On 7/30/2019 at 7:20 PM, Kalyan said: Извините, а почему Ваш пост начинается с претензии? Есть здесь такие, не стот брать в голову. Бог им судья! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 2 августа, 2019 Опубликовано 2 августа, 2019 · Жалоба On 7/30/2019 at 9:50 PM, Kalyan said: Добрый день. У меня есть некоторый массив. Например uint8_t my_arr[10*1024]. Можно ли заставить компилятор положить этот массив в начало или конец оперативной памяти? u8 *my_arr=(u8*)0xC0000000; for(u32 i=0;i<10*1024UL;i++)my_arr[i]=i; Кросс-платформенный код, независящий от компиляторов и сред. ЗдОрово, да :) Только sizeof(my_arr) вернёт 4 на 32-битной платформе, а не 10*1024UL как хотелось... Но мы не ищем лёгких путей, да?? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться