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

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

Нет. Это значит доступно и исполняется. Недоступно - это если оно BusFault или HardFault вызовет.

Что "исполняется"?

Возьмём например LPC17xx и его UART: объясните - как прочитать из его TX-FIFO раз оно доступно?

Ну или любой другой МК с подобной организацией FIFO.

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


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

2 часа назад, jcxz сказал:

Если часть ОЗУ запретить на чтение или на запись через MPU, оно перестанет быть ОЗУ???

Для компилятора - перестанет. Это будет особая область памяти с которой нужно явно указать что делать можно, а что нельзя. 

2 часа назад, jcxz сказал:

Если в ОЗУ контроллера имеется аппаратный контроль чётности например (или другой способ контроля содержимого) - это тоже по вашей логике не ОЗУ получается?

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

 

2 часа назад, jcxz сказал:

Если исходить из этого "определения", то ОЗУ во многих ARM-ах вообще не существует. :biggrin: Так как у них есть MPU, есть MMU, есть контроллеры динамической памяти, есть ОЗУ с контролем чётности и от всего этого там зависит содержимое ОЗУ.

Т.е. ты утверждаешь, что в ARMах любая переменная в ОЗУ в любой момент времени может сама произвольным образом изменить свое значение независимо от действий программы?:shok:

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


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

19 часов назад, artemkad сказал:

аргумент как - "никто кроме функции её не поменяет".

Позвольте прояснить, это вы об аргументе этой функции: void foo(const char *p) ? Хотите сказать, что такое объявление функции говорит, что ничто в программе не изменит объект, адресуемый указателем р, кроме кода внутри тела самой функци? Я правильно понял? Или вы имели ввиду что-то другое?

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


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

16 hours ago, Herz said:

Господа, давайте не будем "тыкать"...

Им можно, они думают что круче чем Гуру :-)

 

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


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

49 минут назад, Darth Vader сказал:

Позвольте прояснить, это вы об аргументе этой функции: void foo(const char *p) ? Хотите сказать, что такое объявление функции говорит, что ничто в программе не изменит объект, адресуемый указателем р, кроме кода внутри тела самой функци? Я правильно понял? Или вы имели ввиду что-то другое?

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

 

Впрочем, если это CV для AVR ругается скорее всего потому, что передается адрес из другого адресного пространства. Т.е. функция ждет адрес на флешу, а ей дают адрес из оперативки. Если-же что-то иное и константные строки в оперативке, а ругается только на volatile, то достаточно привести тип, но иметь ввиду, что функция не ждет, что содержимое может вдруг само поменяться(ну или принудительно запретить прерывания на время работы функции что-бы гарантировать неизменность).

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


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

9 часов назад, artemkad сказал:

Не меняется во время работы этой функции.

Т.е. таково ваше мнение. Я понял и принял к сведению.

А тогда как быть с мнением jcxz, что это значит, что функция гарантирует не изменять объект, адресуемый указателем р, который передан ей в качестве аргумента? Оно, по-вашему, ошибочное или нет?

Вы с этим согласны или нет?

 

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

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


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

1 час назад, Darth Vader сказал:

Т.е. таково ваше мнение. Я понял и принял к сведению.

А тогда как быть с мнением jcxz, что это значит, что функция гарантирует не изменять объект, адресуемый указателем р, который передан ей в качестве аргумента? Оно, по-вашему, ошибочное или нет?

Вы с этим согласны или нет?

Само собой раз функции передается указатель на константные строки она их менять не должна. При попытке вылезет уже не предупреждение, а ошибка.

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


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

18 hours ago, jcxz said:

Возьмём например LPC17xx и его UART: объясните - как прочитать из его TX-FIFO раз оно доступно?

Вы связь с сутью разговора потеряли. Перечитайте и прийдите в себя.

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


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

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

Вы связь с сутью разговора потеряли. Перечитайте и прийдите в себя.

Я вроде вам не хамил...  

Всё с вами ясно - когда не хватает знаний и аргументов, персонажи вроде вас переходят на хамство. :negative:

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


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

16 часов назад, artemkad сказал:

Не меняется во время работы этой функции. Да, естественно, меняться может,

Так меняется или не меняется? Уж определитесь... А то и меняется и не меняется одновременно; и ОЗУ и неОЗУ - тоже одновременно - винегрет какой-то!  :biggrin::biggrin::biggrin:

Вам уже выше дали точное толкование, а вы продолжаете свои вычурные определения изобретать на каком-то собственном птичьем языке. :unknw:

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


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

8 часов назад, artemkad сказал:

Само собой раз функции передается указатель на константные строки она их менять не должна.

Этой функции можно передать указатель на не константу, и не будет ни предупреждений ни ошибок при компиляции:

Цитата

const char Space = 0x20;

char Symb;

void Foo(const char *p);

int main(void) {

    Foo(&Space);  // Нет ошибок

    Symb = 0x20;

    Foo(&Symb);  // Опять нет ошибок - почему?

}

С чего бы это, по-вашему?

Т.е. компилятор не требует передавать в функцию указатель на константу. И не видит никаких ошибок в коде. Хотя тип аргумента функции объявлен как указатель на константу.

Как вы это объясните?

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


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

2 часа назад, Darth Vader сказал:

Т.е. компилятор не требует передавать в функцию указатель на константу.

Если компилятор не размещает константы во флеше, то не будет даже предупреждения. А с чего вдруг быть ошибке - тем более не ясно. Функция объявлена как указатель  на константную строку,  а значит она гарантированно не поменяет содержимое строки. Так с чего вдруг должна быть ошибка от указателя на переменную? Меняться-то эта строка будет за пределами функции, а не во время её работы. 

6 часов назад, jcxz сказал:

Так меняется или не меняется? Уж определитесь...

Читай внимательно, а не цитируй часть фразы ради хайпа. 

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


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

8 hours ago, artemkad said:

Если компилятор не размещает константы во флеше,

Этим занимается линкер. Компилятору по барабану на адреса.

8 hours ago, artemkad said:

Читай внимательно, а не цитируй часть фразы ради хайпа. 

Вы не изволите выражаться технически грамотно, или, хотя бы, на принятом здесь русском языке. А то я читаю эту ветку, но не понимаю, что значит нерусское слово "хайп". Что-то молодёжное, вроде бы. Но мы-то люди взрослые.

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


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

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

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

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

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

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

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

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

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

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