jcxz 4 Posted September 18, 2020 · Report post 10 минут назад, one_eight_seven сказал: Нет. Это значит доступно и исполняется. Недоступно - это если оно BusFault или HardFault вызовет. Что "исполняется"? Возьмём например LPC17xx и его UART: объясните - как прочитать из его TX-FIFO раз оно доступно? Ну или любой другой МК с подобной организацией FIFO. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
artemkad 0 Posted September 18, 2020 · Report post 2 часа назад, jcxz сказал: Если часть ОЗУ запретить на чтение или на запись через MPU, оно перестанет быть ОЗУ??? Для компилятора - перестанет. Это будет особая область памяти с которой нужно явно указать что делать можно, а что нельзя. 2 часа назад, jcxz сказал: Если в ОЗУ контроллера имеется аппаратный контроль чётности например (или другой способ контроля содержимого) - это тоже по вашей логике не ОЗУ получается? Если этот аппаратный контроллер начнет менять содержимое по своему усмотрению - несомненно держать там можно будет только volatile-переменные. Впрочем, аппаратный контроль четности этого не делает. 2 часа назад, jcxz сказал: Если исходить из этого "определения", то ОЗУ во многих ARM-ах вообще не существует. Так как у них есть MPU, есть MMU, есть контроллеры динамической памяти, есть ОЗУ с контролем чётности и от всего этого там зависит содержимое ОЗУ. Т.е. ты утверждаешь, что в ARMах любая переменная в ОЗУ в любой момент времени может сама произвольным образом изменить свое значение независимо от действий программы? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Herz 0 Posted September 18, 2020 · Report post 47 minutes ago, artemkad said: Т.е. ты утверждаешь Господа, давайте не будем "тыкать"... Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Darth Vader 0 Posted September 18, 2020 · Report post 19 часов назад, artemkad сказал: аргумент как - "никто кроме функции её не поменяет". Позвольте прояснить, это вы об аргументе этой функции: void foo(const char *p) ? Хотите сказать, что такое объявление функции говорит, что ничто в программе не изменит объект, адресуемый указателем р, кроме кода внутри тела самой функци? Я правильно понял? Или вы имели ввиду что-то другое? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lagman 0 Posted September 18, 2020 · Report post 16 hours ago, Herz said: Господа, давайте не будем "тыкать"... Им можно, они думают что круче чем Гуру :-) Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
artemkad 0 Posted September 18, 2020 · Report post 49 минут назад, Darth Vader сказал: Позвольте прояснить, это вы об аргументе этой функции: void foo(const char *p) ? Хотите сказать, что такое объявление функции говорит, что ничто в программе не изменит объект, адресуемый указателем р, кроме кода внутри тела самой функци? Я правильно понял? Или вы имели ввиду что-то другое? Не меняется во время работы этой функции. Да, естественно, меняться может, но компилятор будет строить код исходя их того, что не изменится и потому может как убрать кучу, с его точки зрения, лишнего кода, так и лишние чтения из памяти удовлетворяясь временными копиями в регистрах. Впрочем, если это CV для AVR ругается скорее всего потому, что передается адрес из другого адресного пространства. Т.е. функция ждет адрес на флешу, а ей дают адрес из оперативки. Если-же что-то иное и константные строки в оперативке, а ругается только на volatile, то достаточно привести тип, но иметь ввиду, что функция не ждет, что содержимое может вдруг само поменяться(ну или принудительно запретить прерывания на время работы функции что-бы гарантировать неизменность). Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lagman 0 Posted September 18, 2020 · Report post https://ru.wikipedia.org/wiki/Const_(программирование) Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Darth Vader 0 Posted September 19, 2020 (edited) · Report post 9 часов назад, artemkad сказал: Не меняется во время работы этой функции. Т.е. таково ваше мнение. Я понял и принял к сведению. А тогда как быть с мнением jcxz, что это значит, что функция гарантирует не изменять объект, адресуемый указателем р, который передан ей в качестве аргумента? Оно, по-вашему, ошибочное или нет? Вы с этим согласны или нет? Edited September 19, 2020 by Darth Vader Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
artemkad 0 Posted September 19, 2020 · Report post 1 час назад, Darth Vader сказал: Т.е. таково ваше мнение. Я понял и принял к сведению. А тогда как быть с мнением jcxz, что это значит, что функция гарантирует не изменять объект, адресуемый указателем р, который передан ей в качестве аргумента? Оно, по-вашему, ошибочное или нет? Вы с этим согласны или нет? Само собой раз функции передается указатель на константные строки она их менять не должна. При попытке вылезет уже не предупреждение, а ошибка. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
one_eight_seven 0 Posted September 19, 2020 · Report post 18 hours ago, jcxz said: Возьмём например LPC17xx и его UART: объясните - как прочитать из его TX-FIFO раз оно доступно? Вы связь с сутью разговора потеряли. Перечитайте и прийдите в себя. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
jcxz 4 Posted September 19, 2020 · Report post 2 часа назад, one_eight_seven сказал: Вы связь с сутью разговора потеряли. Перечитайте и прийдите в себя. Я вроде вам не хамил... Всё с вами ясно - когда не хватает знаний и аргументов, персонажи вроде вас переходят на хамство. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
jcxz 4 Posted September 19, 2020 · Report post 16 часов назад, artemkad сказал: Не меняется во время работы этой функции. Да, естественно, меняться может, Так меняется или не меняется? Уж определитесь... А то и меняется и не меняется одновременно; и ОЗУ и неОЗУ - тоже одновременно - винегрет какой-то! Вам уже выше дали точное толкование, а вы продолжаете свои вычурные определения изобретать на каком-то собственном птичьем языке. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Darth Vader 0 Posted September 19, 2020 · Report post 8 часов назад, artemkad сказал: Само собой раз функции передается указатель на константные строки она их менять не должна. Этой функции можно передать указатель на не константу, и не будет ни предупреждений ни ошибок при компиляции: Цитата const char Space = 0x20; char Symb; void Foo(const char *p); int main(void) { Foo(&Space); // Нет ошибок Symb = 0x20; Foo(&Symb); // Опять нет ошибок - почему? } С чего бы это, по-вашему? Т.е. компилятор не требует передавать в функцию указатель на константу. И не видит никаких ошибок в коде. Хотя тип аргумента функции объявлен как указатель на константу. Как вы это объясните? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
artemkad 0 Posted September 19, 2020 · Report post 2 часа назад, Darth Vader сказал: Т.е. компилятор не требует передавать в функцию указатель на константу. Если компилятор не размещает константы во флеше, то не будет даже предупреждения. А с чего вдруг быть ошибке - тем более не ясно. Функция объявлена как указатель на константную строку, а значит она гарантированно не поменяет содержимое строки. Так с чего вдруг должна быть ошибка от указателя на переменную? Меняться-то эта строка будет за пределами функции, а не во время её работы. 6 часов назад, jcxz сказал: Так меняется или не меняется? Уж определитесь... Читай внимательно, а не цитируй часть фразы ради хайпа. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
haker_fox 0 Posted September 20, 2020 · Report post 8 hours ago, artemkad said: Если компилятор не размещает константы во флеше, Этим занимается линкер. Компилятору по барабану на адреса. 8 hours ago, artemkad said: Читай внимательно, а не цитируй часть фразы ради хайпа. Вы не изволите выражаться технически грамотно, или, хотя бы, на принятом здесь русском языке. А то я читаю эту ветку, но не понимаю, что значит нерусское слово "хайп". Что-то молодёжное, вроде бы. Но мы-то люди взрослые. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...