VladislavS 39 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба 9 минут назад, AlexandrY сказал: и меняю все мутные копирования на memcpy. В общем случае это не прокатывает. Вот в этом моём примере после "стрёмного" чтения происходит запись в FIFO, которое надо 32-битным делать. Это как и с регистрами с помощью volatile решается. Как там внутри memcpy поступит... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба 2 hours ago, VladislavS said: Вообще, __packed это специфика IAR. Вот что у него в документации написано. Да где же специфика IAR, если я вам прямую ссылку прислал на ARM Compiler'овскую документацию, а там всё очень похоже. Но вы, судя по вашему ответу, отказываетесь делать так, как сказано в документации, и пишете, что это глупость. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба Коллеги, спрошу здесь. Хотя это и для 8.40.1. Ни у кого оптимизация "static clustering" ни приводила к глюкам? Что-то похожее. Нашёл на офицальном сайте ссылку, что в 7.10 в редких случаях эта опция может приводить к некорректному коду. Но про более новые версии - тишина. В нашем случае проявляется в том, что переменная из ОСРВ FreeRTOS pxDelayedTaskList имеет одинаковый адрес с одним из полей класса... Соответственно, когда конструктор класса пишет в своё поле, разрушается структура ОСРВ. А это ведёт к HardFault. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба 2 hours ago, VladislavS said: В общем случае это не прокатывает. Вот в этом моём примере после "стрёмного" чтения происходит запись в FIFO, которое надо 32-битным делать. Это как и с регистрами с помощью volatile решается. Давненько не припомню чтоб в FIFO писал программно. На тож DMA есть! А там хошь не хошь, будешь вылизывать все выравнивания и кэши. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба 1 час назад, one_eight_seven сказал: если я вам прямую ссылку прислал на ARM Compiler'овскую документацию На заборе много что написано. Вот что об этом компилятор думает. 1 час назад, one_eight_seven сказал: Но вы, судя по вашему ответу, отказываетесь делать так, как сказано в документации, и пишете, что это глупость. Ну да, документацию не читал, код не писал. Просто попи...ть на форум зашёл :) 1 час назад, AlexandrY сказал: Давненько не припомню чтоб в FIFO писал программно. На тож DMA есть! А если не завезли на USB DMA? Да и смысла никакого. Ждать передачи не надо. Копирования в FIDO от 1 до 16 штук максимум. Проще так передать, чем DMA заводить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба 9 minutes ago, VladislavS said: Ну да, документацию не читал, код не писал. Просто попи...ть на форум зашёл :) Ну так и? Греп по установке не показывает заголовочник, где это определено? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба 11 минут назад, one_eight_seven сказал: Греп по установке не показывает заголовочник, где это определено? Угу, показал :)))). Вот оно, суперопределение! c:\Keil_v5\UV4\armcc_intr.h #define __packed Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба 42 минуты назад, VladislavS сказал: Угу, показал :)))). Вот оно, суперопределение! Попробуйте другие синонимы, КЕЙЛ говорит, что все оно поддерживается:9.12 __packed Цитата Related concepts 4.35 The __packed qualifier and unaligned data access in C and C++ code 4.40 Comparisons of an unpacked struct, a __packed struct, and a struct with individually __packed fields, and of a __packed struct and a #pragma packed struct Related reference 9.57 __attribute__((packed)) type attribute 9.64 __attribute__((packed)) variable attribute 9.93 #pragma pack(n) 10.4 Structures, unions, enumerations, and bitfields in ARM C and C++ Я обычно применяю #pragma pack(1) ... #pragma pack Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба 1 hour ago, VladislavS said: А если не завезли на USB DMA? Да и смысла никакого. Ждать передачи не надо. Копирования в FIDO от 1 до 16 штук максимум. Проще так передать, чем DMA заводить. Такие ексцессы только раз в жизни бывают по глупости. Потом либо с готовым стеком берешь, либо с DMA. Так что юзайте memcpy и живите спокойно. USB без DMA вы уже прошли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба 1 hour ago, VladislavS said: Угу, показал :)))). Вот оно, суперопределение! Выглядит, как неполное цитирование. Наверняка перед этим что-то, навроде #ifdef lint, а второе суперопределение (наверняка, сводящееся к аттрибутам с подчеркиваниями) будет после #else. Ну или у вас неоригинальный файл. Просто настолько маловероятно, что об этом пишется в вопросах и ответах, в документации, а в гугле не находятся проблемы, связанные с __packed, эта проблема решена и в GCC и в IAR, но только в armcc - заявлено, что функционал есть, но по факту он отсутствует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 8 июня, 2020 Опубликовано 8 июня, 2020 · Жалоба Они просто не успели доки с компилятора V5 на компилятор V6 переделать. Там много такого у них в доках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 10 июня, 2020 Опубликовано 10 июня, 2020 (изменено) · Жалоба Подкину ещё ложку дёгтя к IAR. IAR не умеет работать с локальными метками. Ключевое слово __label__ он не знает. И это трагедия. На развёртывающихся макросах начинает орать, что метка уже объявлена, если убрать __label__. #define render_layers_conditional(tile_alpha, obj_alpha, dest) \ { \ __label__ skip; \ Файлик приложил чтоб не быть голословным. video.rar С GCC проблем нет. Изменено 10 июня, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 10 июня, 2020 Опубликовано 10 июня, 2020 · Жалоба 26 minutes ago, __inline__ said: Файлик приложил чтоб не быть голословным. Прикольная техника полиморфизма на C с помощью макросов. Я вам сочувствую, для отладки сущий ад. А метки в IAR отлично работают. Но только их не надо объявлять. Все время пользуюсь метками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 10 июня, 2020 Опубликовано 10 июня, 2020 · Жалоба 10 minutes ago, AlexandrY said: А метки в IAR отлично работают. Но только их не надо объявлять. В том файлике, что приложил, объявление меток необходимо. Иначе при компиляции пишет, что такая метка есть. При развёртывании макросов, там несколько копий создаётся и метка в каждой копии своя. Метки сгруппированы в одну функцию. Поэтому __label__ нужен. Иначе вручную придётся развёртывать макросы и по 10 раз один и тот же фрагмент писать. 11 minutes ago, AlexandrY said: Прикольная техника полиморфизма на C с помощью макросов. Я вам сочувствую, для отладки сущий ад. :) Препроцессором раскрутить все макросы и отлаживать. Проблемы как таковой нет. Код рабочий (по крайней мере на ПК он работает). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 10 июня, 2020 Опубликовано 10 июня, 2020 · Жалоба 36 minutes ago, __inline__ said: Препроцессором раскрутить все макросы и отлаживать. О! Да вы все сами знаете. Точно. Раскрутить препроцессором и сделать нормальные функции чтобы можно было отлаживать. И с метками сразу не будет проблемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться