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