-
- "ptr = tabDMAout + index;" или "ptr = &tabDMAout[index];" - BlackMorda(18.09.2022 23:06)
- Всё что нужно было сделать: uint16_t var[16]; - VladislavS.(17.09.2022 09:57)
- Если tabDMAout это массив указателей, то и объявлять его надо как массив указателей. VladislavS.(8 знак., 17.09.2022 06:47, ссылка)
- Ради интереса набросал ваш пример для "tcc" и получил вполне
разумное предупреждение, но гораздо раньше: 2kon(720 знак., 16.09.2022 22:53)
- Уже все обсосали же VladislavS.(60 знак., 17.09.2022 06:50)
- Во-первых, у вас неоптимальная запись. А во-вторых, 2kon(68 знак., 17.09.2022 08:18)
- Что у меня неоптимальное? - VladislavS.(17.09.2022 08:28)
- У вас "магическое число" гуляет тут и там... 2kon(172 знак., 17.09.2022 11:42)
- Не у меня, а у ТС. Мою версию на плюсах я чуть ниже приводил. - VladislavS.(17.09.2022 12:17)
- У вас "магическое число" гуляет тут и там... 2kon(172 знак., 17.09.2022 11:42)
- Что у меня неоптимальное? - VladislavS.(17.09.2022 08:28)
- Во-первых, у вас неоптимальная запись. А во-вторых, 2kon(68 знак., 17.09.2022 08:18)
- Уже все обсосали же VladislavS.(60 знак., 17.09.2022 06:50)
- Продаю секретные знания про тип uintptr_t - lloyd(16.09.2022 12:45)
- Какая услада сердцу паскальщику читать эту беседу в пятницу - Kpoк(16.09.2022 11:56)
- Если закрыть глаза на то что надо было просто сделать uint16_t
var[16]; и не сношать мозги компилятору, то на плюсах код автора
попроще выглядит. VladislavS.(8 знак., 17.09.2022 08:43, ссылка)
- О, интересно узнать под какой стандарт С++ написан код? 2kon(28 знак., 17.09.2022 14:15)
- С++20. Если вынести объявление i перед циклом, то С++17. Если
std::size заменить на ваш макрос, то С++11. Что такое С++98 и
почему о нём в 2022 разговор идёт даже не представляю. - VladislavS.(17.09.2022 15:48)
- Так, о своём. VC++ 6 вроде бы должен поддерживать. 2kon(49 знак., 18.09.2022 11:56)
- С++20. Если вынести объявление i перед циклом, то С++17. Если
std::size заменить на ваш макрос, то С++11. Что такое С++98 и
почему о нём в 2022 разговор идёт даже не представляю. - VladislavS.(17.09.2022 15:48)
- О, интересно узнать под какой стандарт С++ написан код? 2kon(28 знак., 17.09.2022 14:15)
- Он издевается! - SciFi(16.09.2022 12:19)
- Смакую! - Kpoк(16.09.2022 12:31)
- И ассемблерщику... - mse homjak(16.09.2022 11:58)
- Если закрыть глаза на то что надо было просто сделать uint16_t
var[16]; и не сношать мозги компилятору, то на плюсах код автора
попроще выглядит. VladislavS.(8 знак., 17.09.2022 08:43, ссылка)
- Следует констатировать, что в сях у нас тут беда. Вопрос задан так, что наполовину непонятно что именно надо. А большинство ответов такие, что обнять и плакать, но отчасти от туманности вопроса... - SciFi(16.09.2022 09:51)
- const uint16_t* tabDMAout[16] = {&var0, &var1, ....,
&var15}; symbions(38 знак., 16.09.2022 09:49)
- "Ты выдаешь наши лучшие секреты!" - Krn(16.09.2022 12:46, )
- ...Но делаешь это без уважения - mse homjak(16.09.2022 12:51)
- "Ты выдаешь наши лучшие секреты!" - Krn(16.09.2022 12:46, )
- "по нему грузить массив ДМА" вы про адресный регистры DMA ??? дык
там указатели вообще не играют, грузится обычная переменная, ваш
массив туда напрямую зайдет как родной - Aleksey_75(16.09.2022 09:48)
- Нет, я про массив отправляемый по DMA. идея такой записи позволяет
написать компактный код для загрузки массива перед отправкой и
одновременно удобно изменять расположение данных в массиве
отправки, НЕ СТРУКТУРИРУЯ этот массив. Потому что имеется два
канала связи устройства с внешними каналами и форматирование данных
в них разное. - my504(16.09.2022 10:01)
- бррр... у вас массив объявлен как const как вы в него что либо грузить собрались ? я бы сделал по другому,
можно работать с этим массивом как со структурами ((struct1_t
*)tabDMAout)-> бла..бла или ((struct2_t
*)tabDMAout)->бла-бла - Aleksey_75(16.09.2022 10:06)
- У меня ощущение, что вы не прочли написанный в стартовом сообщении
код... ))) У меня грузится массив ДМА. И он в ОЗУ. Во флеше шаблон
адресов. - my504(16.09.2022 10:16)
- действительно, не правильно понял.. - Aleksey_75(16.09.2022 10:18)
- У меня ощущение, что вы не прочли написанный в стартовом сообщении
код... ))) У меня грузится массив ДМА. И он в ОЗУ. Во флеше шаблон
адресов. - my504(16.09.2022 10:16)
- бррр... у вас массив объявлен как const как вы в него что либо грузить собрались ? я бы сделал по другому,
можно работать с этим массивом как со структурами ((struct1_t
*)tabDMAout)-> бла..бла или ((struct2_t
*)tabDMAout)->бла-бла - Aleksey_75(16.09.2022 10:06)
- Нет, я про массив отправляемый по DMA. идея такой записи позволяет
написать компактный код для загрузки массива перед отправкой и
одновременно удобно изменять расположение данных в массиве
отправки, НЕ СТРУКТУРИРУЯ этот массив. Потому что имеется два
канала связи устройства с внешними каналами и форматирование данных
в них разное. - my504(16.09.2022 10:01)
- А почему сразу не объявить const uint16_t* tabDMAout[16]... - Andreas(16.09.2022 09:40)
- У вас const отклеился. Надо так: uint16_t* const tabDMAout[16]; - SciFi(16.09.2022 09:43)
- За это тоже спасибо. Хороший вариант. - my504(16.09.2022 10:27)
- Да, вечно путаю, да и обычно надо const char* const dd[]; - Andreas(16.09.2022 09:55)
- +1 . Это сложно. Надо язык знать. - VladislavS.(16.09.2022 09:42)
- все равно тип придется приводить ) (мне так кажется) uint16_t* vs
const uint16_t* - Aleksey_75(16.09.2022 09:42)
- Не, ему надо константные указатели, а не указатель на константы. - VladislavS.(16.09.2022 09:45)
- Само собой, но тут хотя бы безопасное приведение. Приведение через
uint32_t, вообще говоря, не на любой платформе сработает правильно. - VladislavS.(16.09.2022 09:44)
- Вообще говоря, подобное приведение все равно есть. Оно неизбежно
при загрузке адресов в ДМА. И в случае с массивом констант я сделал
его через дефайн вида my504(69 знак., 16.09.2022 10:24)
- Только править никогда не понадобится. Макрос лишний. Я вообще
привожу к (int): всего три буквы, и никаких предупреждений. - SciFi(16.09.2022 10:27)
- Дело не в предупреждениях. Сообщать компилятору максимально точную
информацию о данных суть хорошо. Чем больше компилятор знает, тем
лучше код делает. - VladislavS.(16.09.2022 10:31)
- Звучит красиво, но нет. В этом конкретном случае вообще не в тему. - SciFi(16.09.2022 11:09)
- А зачем в каком-то конкретном случае делать плохо? Может просто привыкнуть всегда делать хорошо? - VladislavS.(16.09.2022 11:19)
- Звучит красиво, но нет. В этом конкретном случае вообще не в тему. - SciFi(16.09.2022 11:09)
- Я уже понял. Не сообразил, что перестановка const внутрь дает искомое. - my504(16.09.2022 10:30)
- Дело не в предупреждениях. Сообщать компилятору максимально точную
информацию о данных суть хорошо. Чем больше компилятор знает, тем
лучше код делает. - VladislavS.(16.09.2022 10:31)
- Только править никогда не понадобится. Макрос лишний. Я вообще
привожу к (int): всего три буквы, и никаких предупреждений. - SciFi(16.09.2022 10:27)
- Вообще говоря, подобное приведение все равно есть. Оно неизбежно
при загрузке адресов в ДМА. И в случае с массивом констант я сделал
его через дефайн вида my504(69 знак., 16.09.2022 10:24)
- У вас const отклеился. Надо так: uint16_t* const tabDMAout[16]; - SciFi(16.09.2022 09:43)
- все верно, приведите тип uint32_t к указателю на uint16. ptr =
(uint16_t *)tabDMAout[index]; - Aleksey_75(16.09.2022 09:35)
- Спасибо тебе, добрый человек... ))) Я затупил. Все сверсталось.
Правда я забыл в приведенном исходнике добавить в массиве констант
приведение типа (uint32_t)&var0. Но оно по факту есть. my504(218 знак., 16.09.2022 09:54)
- Не надо так делать. Если нужен массив указателей, то делайте массив указателей. Будущее вам обратного не простит. - VladislavS.(16.09.2022 09:58)
- Спасибо тебе, добрый человек... ))) Я затупил. Все сверсталось.
Правда я забыл в приведенном исходнике добавить в массиве констант
приведение типа (uint32_t)&var0. Но оно по факту есть. my504(218 знак., 16.09.2022 09:54)