-
- А если вот это почитать, и вообще изучить насчет инструкции SWP Evgeny_CD(1 знак., 05.07.2022 23:32, ссылка)
- Может, поможет Evgeny_CD(2 знак., 05.07.2022 23:49, ссылка, ссылка)
- Ну дык по первому документу я и работаю, что бы я без него смог
сделать, разбираясь с кэшами на низком уровне? TRM на ядро тоже
пользую. - VVB(06.07.2022 08:09)
- Релиз ядра и patch level совпадают с докой? Баги в ядрах ARM
случаются. - Evgeny_CD(06.07.2022 08:42)
- Как определить patch level? VVB(267 знак., 06.07.2022 09:35, ссылка)
- Видимо, только по документации производителя чипа. Баги по мере роста ревизии у них, к счастью, обычно убывают. - Evgeny_CD(06.07.2022 10:03)
- Как определить patch level? VVB(267 знак., 06.07.2022 09:35, ссылка)
- Релиз ядра и patch level совпадают с докой? Баги в ядрах ARM
случаются. - Evgeny_CD(06.07.2022 08:42)
- Ну дык по первому документу я и работаю, что бы я без него смог
сделать, разбираясь с кэшами на низком уровне? TRM на ядро тоже
пользую. - VVB(06.07.2022 08:09)
- Может, поможет Evgeny_CD(2 знак., 05.07.2022 23:49, ссылка, ссылка)
- мои пять копеек. Zoro(893 знак., 05.07.2022 23:16)
- А какая именно сборка GCC использована? Или сам собирал? - Evgeny_CD(05.07.2022 22:59)
- 1. почему линкер не выравнивает переменные, размера меньше чем
слово, по адресу, кратному слову? RED_DRAGON(976 знак., 05.07.2022 14:40)
- Где такое написано "volatile extends to the holding register"?
Первый раз слышу. - SciFi(05.07.2022 14:45)
- да волатайл не причем (сорри склерозю). Опираясь на арм7,9 Должно
быть так: LDRB расширяет читаемое значение до разрядности регистра
заполняя нулевыми битами
справаслева. Это первая часть, вторая часть: аналигнед аксесс может быть включен/выключен битиками (тут вопрос к тому чей процессор) RED_DRAGON(15 знак., 05.07.2022 15:42)
- да волатайл не причем (сорри склерозю). Опираясь на арм7,9 Должно
быть так: LDRB расширяет читаемое значение до разрядности регистра
заполняя нулевыми битами
- Где такое написано "volatile extends to the holding register"?
Первый раз слышу. - SciFi(05.07.2022 14:45)
- Вынужден сдаться. Что-то внутрях сломано (ядро/кэш/SDRAM). VVB(1116 знак., 05.07.2022 12:20)
- Выглядит по описанию так, что к одной и той же переменной в одном
месте обращение кэшированное, а в другой - нет. LightElf(72 знак., 06.07.2022 00:52)
- Ты правильно емнип. Я к этому же выводу пришёл, только что делать
дальше -- х.з. Даже если я втыкаю команды опустошения буфера записи
-- эффекта нет. VVB(462 знак., 06.07.2022 08:26)
- Да и вообще, кэши у ARM явно трансвеститы придумывали. - LightElf(06.07.2022 10:54)
- Тут такэ... У МИПС, в некоторых случаях, например, требуецца спецкоманда сброса конвейера. Вот прям так, ассемблером. Мож и тут не всё так однозначно. mse homjak(43 знак., 06.07.2022 14:21)
- Да и вообще, кэши у ARM явно трансвеститы придумывали. - LightElf(06.07.2022 10:54)
- Ты правильно емнип. Я к этому же выводу пришёл, только что делать
дальше -- х.з. Даже если я втыкаю команды опустошения буфера записи
-- эффекта нет. VVB(462 знак., 06.07.2022 08:26)
- Выглядит по описанию так, что к одной и той же переменной в одном
месте обращение кэшированное, а в другой - нет. LightElf(72 знак., 06.07.2022 00:52)
- Вот это неожиданность VVB(2015 знак., 01.07.2022 10:07)
- Спасибо. Респект за проработку вопроса. - Cкpипaч(01.07.2022 12:09)
- Отсюда ответы: VladislavS.(1209 знак., 30.06.2022 20:21)
- +1. Байтовая переменная может законно располагаться с байтовым выравниванием (т.е. без выравнивания). Ставлю на то, что где-то идет обращение к такой переменной как к 2- или 4-байтовой. Например при передаче через указатель с преобразованием типа указателя. - il-2(02.07.2022 10:17)
- lwIP это проверенный временем стек, вряд ли там ошибки. В своём
коде ошибки искал долго, но не нашёл. Модульные тесты на ПК
работают без проблем. VVB(120 знак., 30.06.2022 20:37)
- GCC vs lwIP. Делаем ставки? - VladislavS.(30.06.2022 20:42)
- Ни то, ни другое. Там ещё фриртос. И кто-то делал порт lwip. А также собственно приложение. - SciFi(30.06.2022 20:59)
- GCC vs lwIP. Делаем ставки? - VladislavS.(30.06.2022 20:42)
- +1. Вангую, ТС не в ту сторону копает. - SciFi(30.06.2022 20:25)
- А зачем такая жесткая оптимизация на О3 ? мы обычно юзаем Os... sav6622(147 знак., 30.06.2022 18:35)
- Ничего не понимаю. Переменная имеет тип u8_t, расположена по
неровному адресу, ну и что? Никакого криминала. - SciFi(30.06.2022 16:59)
- Там арм9, это кортексу пофигу - RED_DRAGON(05.07.2022 15:31)
- там следующая переменная падает по невыровненному адресу. - Mahagam(30.06.2022 17:01)
- Вот ещё что раскопал VVB(162 знак., 30.06.2022 19:38, ссылка)
- Если она имеет тип u8_t, что в этом криминального? - SciFi(30.06.2022 17:04)
- для ARM9 (и видимо, того что там volatile - оно может пытается
какими иными инструкциями туда добираться) видимо это криминал. Mahagam(133 знак., 30.06.2022 17:17)
- Можно перед переменной u8_t в модуле pbuf.c разместить любую другую
переменную u32_t или любой указатель, тогда линкер вставит *FILL* и
будет всё хорошо (выровненный доступ). - VVB(30.06.2022 18:28)
- __attribute__ ((aligned (4))) - lloyd(01.07.2022 10:17)
- А слабо без изменения исходника? Каким-нибудь ключом компиляции или
директивой линкера? - VVB(01.07.2022 11:17)
- Я просто напомню, что не доказано, что выравнивание привело к
проблемам. Это всего лишь версия, причём не оч. правдоподобная,
КМК. - SciFi(01.07.2022 11:18)
- я, кстати, сам также думаю, где-то косяки в настройке или работе с кэшем. кэш отключаю -- всё работает. разбираюсь. VVB(131 знак., 01.07.2022 11:27)
- Я просто напомню, что не доказано, что выравнивание привело к
проблемам. Это всего лишь версия, причём не оч. правдоподобная,
КМК. - SciFi(01.07.2022 11:18)
- А слабо без изменения исходника? Каким-нибудь ключом компиляции или
директивой линкера? - VVB(01.07.2022 11:17)
- __attribute__ ((aligned (4))) - lloyd(01.07.2022 10:17)
- Сомнительная версия. К тому же её легко проверить, заглянув в
листинг дизассемблера. - SciFi(30.06.2022 18:23)
- Неблагодарное это занятие, смотреть, "что мне там эта сцука
наоптимизировало" (С) местного жильца. Но я завтра гляну, надо
разобраться. VVB(186 знак., 30.06.2022 18:35)
- Ну, если хочется разобраться, что там происходит, то как ещё? Можно
забить, конечно. - SciFi(30.06.2022 20:20)
- Ну нифига себе подход "забить". Такая "бомба", пропущенная при
разработке, может рвануть в любой момент у юзера. - VVB(30.06.2022 20:38)
- Ачотакова? Среди нас есть товарищи, которые говорят "авторы оптимизаторов не справились со сборкой", и ниипёт. Тоже позиция :-) >>> SciFi(1 знак., 30.06.2022 21:02, ссылка)
- Ну нифига себе подход "забить". Такая "бомба", пропущенная при
разработке, может рвануть в любой момент у юзера. - VVB(30.06.2022 20:38)
- Ну, если хочется разобраться, что там происходит, то как ещё? Можно
забить, конечно. - SciFi(30.06.2022 20:20)
- Неблагодарное это занятие, смотреть, "что мне там эта сцука
наоптимизировало" (С) местного жильца. Но я завтра гляну, надо
разобраться. VVB(186 знак., 30.06.2022 18:35)
- Можно перед переменной u8_t в модуле pbuf.c разместить любую другую
переменную u32_t или любой указатель, тогда линкер вставит *FILL* и
будет всё хорошо (выровненный доступ). - VVB(30.06.2022 18:28)
- для ARM9 (и видимо, того что там volatile - оно может пытается
какими иными инструкциями туда добираться) видимо это криминал. Mahagam(133 знак., 30.06.2022 17:17)
- А если вот это почитать, и вообще изучить насчет инструкции SWP Evgeny_CD(1 знак., 05.07.2022 23:32, ссылка)