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

STM32F429 и 16-битная SDRAM 16MB /32 MB : практический опыт?

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

А можно пояснить назначение и места использования следующих макроопределений (с остальными - понятно):


#define lenof(var)   (sizeof(var) * ((CHAR_BIT + 7) / 8))
#define ptrsizeof(m) (void *)&(m), sizeof(m)

Особенно интересует второе. Заранее благодарен:smile:

  1. Возвращает размер var в байтах. А не в char-ах как sizeof(). Для ARM sizeof() == lenof(). Осталось у меня с тех времён, когда писал для DSP. :wink:
  2. Развёртывается в пару: указатель на m, sizeof(m). Это полезно там, где например нужно в функцию передать указатель на массив и его размер. Чтобы указать один раз. Я аргументы всех подобных функций (принимающих указатель + размер массива) стараюсь так строить, чтобы эти два аргумента шли в таком порядке, друг за другом. Подобный способ используется в последних версиях VS (visual studia) для многих функций типа sprintf(...) и т.п.

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


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

2 hours ago, Arlleex said:

Это расширение компилятора, как я понимаю, а не утвержденная Стандартом финтиклюшка. 

Это как раз стандарт языка а не финтифлюшки в голове

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

6.7.10 Static assertions

7.2 Diagnostics <assert.h>

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


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

29 минут назад, haker_fox сказал:

Впервую очередь напрягают баги оболочки, которую я вынужден использовать для отладки (пишу в Slick Edit). Качество и правильность кодогенерации не оценивал. Но сейчас в проекте как раз ищу пару плавающих багов. Есть подозрение, что портится память. Может быть и компилятор виновать. Но, с другой стороны, хардфолты не вылетают. Но это ни о чём не говорит.

А вы до сих пор 7.80.4 используете. Нашёл в вашем сообщении.

Я пользую 7.80.4 и 8.32.

Генерить код инструментом, про который заведомо известно, что в каких-то случаях он генерит неверный код - это как гулять по минному полю. :biggrin:

Понятно разве что если другого выбора нет.

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


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

Только что, sasamy сказал:

Это как раз стандарт языка а не финтифлюшки в голове

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

6.7.10 Static assertions

7.2 Diagnostics <assert.h>

Убедили.

Но для C99 (как мне это нужно) - этого нет. Вернее, IAR 3.10 для STM8 не даст выбрать C11 (потому что его там нет). Это я вечером проверю дома.

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


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

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

Но для C99 (как мне это нужно) - этого нет. Вернее, IAR 3.10 для STM8 не даст выбрать C11 (потому что его там нет). Это я вечером проверю дома.

Я вот не понимаю: ЗАЧЕМ???  Ведь то же самое делается простым макросом.

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


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

Только что, jcxz сказал:

Я вот не понимаю: ЗАЧЕМ???  Ведь то же самое делается простым макросом.

По сути - не за чем. Итак сделано макросом, еще и функциональности побольше:wink2:

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


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

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

По сути - не за чем. Итак сделано макросом, еще и функциональности побольше:wink2:

Вот именно. Я когда-то попробовал включить этот с11 или с99 (не помню уж) и кроме полезного, там повылазила ещё куча ненужных ограничений по написанию кода. Так что я плюнул и реализовал полезные мне функции самостоятельно, макросами. Потому и называются они у меня assert_static, а не static_assert, на всякий случай, чтобы не было пересечений с общепринятыми, но при этом было интуитивно понятно их назначение.

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


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

40 minutes ago, jcxz said:

это как гулять по минному полю

Согласен! Запустил IAR 8.32.2. Надесь, там не успели наляпать ошибок.

14 minutes ago, jcxz said:

Потому и называются они у меня assert_static, а не static_assert

Вот, а я вчера лом сильно запутался, когда цитировал сообщения)

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


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

3 минуты назад, haker_fox сказал:

Вот, а я вчера лом сильно запутался, когда цитировал сообщения)

А Вы используйте CTRL+C  :wink2:

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


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

On 1/17/2019 at 11:34 AM, Arlleex said:

Но для C99 (как мне это нужно) - этого нет. Вернее, IAR 3.10 для STM8 не даст выбрать C11 (потому что его там нет).

 

https://stackoverflow.com/questions/25552852/how-to-detect-if-a-compiler-supports-static-assert/25553484#25553484

Note that some compilers (e.g., IAR) also have a static_assert keyword extension even if they don't support C11.

 

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


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

On 1/17/2019 at 12:05 PM, haker_fox said:

Вот, а я вчера лом сильно запутался, когда цитировал сообщения)

 

On 1/17/2019 at 11:51 AM, jcxz said:

называются они у меня assert_static, а не static_assert, на всякий случай, чтобы не было пересечений с общепринятыми, но при этом было интуитивно понятно их назначение.

интуитивно понятный макрос с искаженным сиснтаксисом и семантикой ? пипец какой-то

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


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

17 минут назад, sasamy сказал:

интуитивно понятный макрос с искаженным сиснтаксисом и семантикой ? пипец какой-то

Я вам что-то навязывал, заставлял использовать? Интуитивно понятный мне - этого достаточно.

PS: Если по делу нечего сказать, лучше промолчать.

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


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

12 minutes ago, jcxz said:

Интуитивно понятный мне - этого достаточно

Странный подход к делу. Я не противник макросов, но можно же было нормально сделать - по стандарту и понятное всем.

Quote

Я вам что-то навязывал

мне - нет

PS аналогичный

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


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

1 минуту назад, sasamy сказал:

Странный подход к делу. Я не противник макросов, но можно же было нормально сделать - по стандарту и понятное всем.

И как это будет "по стандарту и нормально"?

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


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

1 hour ago, jcxz said:

И как это будет "по стандарту и нормально"?

хотя бы так
 

#if !defined(static_assert)
#define static_assert(x,m) ((x) ? 1: 1 / (x))
#endif

 

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


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

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

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

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

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

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

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

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

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

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