Перейти к содержанию
    

Кто тестировал IAR ARM 8.50, отзовитесь

9 минут назад, AlexandrY сказал:

и меняю все мутные копирования на memcpy.

В общем случае это не прокатывает. Вот в этом моём примере после "стрёмного" чтения происходит запись в FIFO, которое надо 32-битным делать. Это как и с регистрами с помощью volatile решается. Как там внутри memcpy поступит...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, VladislavS said:

Вообще, __packed это специфика IAR. Вот что у него в документации написано.

Да где же специфика IAR, если я вам прямую ссылку прислал на ARM Compiler'овскую документацию, а там всё очень похоже. Но вы, судя по вашему ответу, отказываетесь делать так, как сказано в документации, и пишете, что это глупость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги, спрошу здесь. Хотя это и для 8.40.1. Ни у кого оптимизация "static clustering" ни приводила к глюкам?

Что-то похожее.

Нашёл на офицальном сайте ссылку, что в 7.10 в редких случаях эта опция может приводить к некорректному коду. Но про более новые версии - тишина.

В нашем случае проявляется в том, что переменная из ОСРВ FreeRTOS pxDelayedTaskList имеет одинаковый адрес с одним из полей класса... Соответственно, когда конструктор класса пишет в своё поле, разрушается структура ОСРВ. А это ведёт к HardFault.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, VladislavS said:

В общем случае это не прокатывает. Вот в этом моём примере после "стрёмного" чтения происходит запись в FIFO, которое надо 32-битным делать. Это как и с регистрами с помощью volatile решается. 

Давненько не припомню чтоб в FIFO писал программно. На тож DMA есть!
А там хошь не хошь, будешь вылизывать все выравнивания и кэши. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, one_eight_seven сказал:

если я вам прямую ссылку прислал на ARM Compiler'овскую документацию

На заборе много что написано. Вот что об этом компилятор думает.

__packed_error.thumb.png.db1fc5863c08a4648cb33d6cbc1b6368.png

1 час назад, one_eight_seven сказал:

Но вы, судя по вашему ответу, отказываетесь делать так, как сказано в документации, и пишете, что это глупость.

Ну да, документацию не читал, код не писал. Просто попи...ть на форум зашёл :)

1 час назад, AlexandrY сказал:

Давненько не припомню чтоб в FIFO писал программно. На тож DMA есть!

А если не завезли на USB DMA? Да и смысла никакого. Ждать передачи не надо. Копирования в FIDO от 1 до 16 штук максимум. Проще так передать, чем DMA заводить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, VladislavS said:

Ну да, документацию не читал, код не писал. Просто попи...ть на форум зашёл :)

Ну так и? Греп по установке не показывает заголовочник, где это определено?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Греп по установке не показывает заголовочник, где это определено?

Угу, показал :)))). Вот оно, суперопределение!

c:\Keil_v5\UV4\armcc_intr.h 
  
#define __packed

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, VladislavS said:

А если не завезли на USB DMA? Да и смысла никакого. Ждать передачи не надо. Копирования в FIDO от 1 до 16 штук максимум. Проще так передать, чем DMA заводить.

Такие ексцессы только  раз в жизни бывают по глупости.
Потом либо с готовым стеком берешь, либо с DMA. 
Так что юзайте memcpy и живите спокойно. USB без DMA вы уже прошли. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, VladislavS said:

Угу, показал :)))). Вот оно, суперопределение!

Выглядит, как неполное цитирование.
Наверняка перед этим что-то, навроде #ifdef lint, а второе суперопределение (наверняка, сводящееся к аттрибутам с подчеркиваниями) будет после #else.
Ну или у вас неоригинальный файл.
Просто настолько маловероятно, что об этом пишется в вопросах и ответах, в документации, а в гугле не находятся проблемы, связанные с __packed, эта проблема решена и в GCC и в IAR, но только в armcc - заявлено, что функционал есть, но по факту он отсутствует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Они просто не успели доки с компилятора V5 на компилятор V6 переделать. Там много такого у них в доках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подкину ещё ложку дёгтя к IAR. :biggrin:

 

IAR не умеет работать с локальными метками. Ключевое слово __label__ он не знает.  И это трагедия.   На развёртывающихся макросах начинает орать, что метка уже объявлена, если убрать __label__.

 

#define render_layers_conditional(tile_alpha, obj_alpha, dest)                \
{                                                                             \
  __label__ skip;                                                             \

 

Файлик приложил чтоб не быть голословным.

 

 video.rar

 

С GCC проблем нет.

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, __inline__ said:

Файлик приложил чтоб не быть голословным.

Прикольная техника полиморфизма на C с помощью макросов. Я вам сочувствую, для отладки сущий ад.  

А метки в IAR отлично работают. Но только их не надо объявлять.
Все время пользуюсь метками.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, AlexandrY said:

А метки в IAR отлично работают. Но только их не надо объявлять.

 

В том файлике, что приложил, объявление меток необходимо. Иначе при компиляции пишет, что такая метка есть.  При развёртывании макросов, там несколько копий создаётся и метка в каждой копии своя. Метки сгруппированы в одну функцию. Поэтому __label__ нужен.  Иначе вручную придётся развёртывать макросы и по 10 раз один и тот же фрагмент писать.

 

11 minutes ago, AlexandrY said:

Прикольная техника полиморфизма на C с помощью макросов. Я вам сочувствую, для отладки сущий ад. 

 

:) Препроцессором раскрутить все макросы и отлаживать. Проблемы как таковой нет.  Код рабочий (по крайней мере на ПК он работает). :sun_bespectacled:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

36 minutes ago, __inline__ said:

 Препроцессором раскрутить все макросы и отлаживать. 

О! Да вы все сами знаете. 
Точно. Раскрутить препроцессором и сделать нормальные функции чтобы можно было отлаживать. 
И с метками сразу не будет проблемы. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...