Цитата(Ruslan1 @ Nov 3 2011, 12:20)

Вы считаете, что применение программистом слов "static" и "const" зависит от типа архитектуры ядра?
А вы считаете, что они предназначены для размещения данных в той или иной памяти? Впрочем, это распространенная ошибка.
Объясняю: спецификатор const преднаначен лишь для того, чтобы сказать компиляторору, что эта переменная (или, если это указатель, то данные на которые он указывает) не должны меняться. И поэтому если компилятор встретит код, который меняет эти данные, он должен выдать не него ошибку. Но это не значит, что они могут размешаться в памяти программ! Поясню на конкретном примере: функция strcpy имеет такой прототип:
char* strcpy( char *strDestination, const char *strSource);
strSource здесь - константный указатель на char. Значит ли это, чо компилятор при трансляции этой функции должен при обращении к данным, адресуемым этим указателем, генерировать код для обращении к памяти программ? Разумеется нет, ведь я могу использовать эту функцию для пересылки строк из памяти данных! Поэтому const нельзя использовать для таких целей, для этого могут использоваться только нестандартные спецификаторы. Тем более, что типы памятей могут не ограничиваться только памятью команд и данных, в том же 8051 есть области DATA, IDATA, XDATA, и другие, о которых стандарт Си не обязан ничего знать.
Что же касается static, то он вообще не имеет отношения к размещению данных (за исключением некоторых мелочей, не относящихся к обсуждаемому вопросу).
Цитата(Ruslan1 @ Nov 3 2011, 12:20)

Давайте определимся. Вы говорите о проблемах и различии в си-программе не для гарвард-негарвард, а при написании программ на одном конкретном гарвардоподобном ядре при применении одного конкретного компилятора. И проецируете эти проблемы на все прцессоры и все компиляторы. Но это не так, есть гарвардоподобные ядра и компиляторы к ним, в которых описанных вами проблем нет.
Мудреное предложение которое трудно понять. Я говорю о том, о чем спрашивал топикстартер, а именно: "Какая разнится между гарвардской и фон неймовской архитектурой для С-программиста?" Заметте, речь идет не о проблемах, а о разнице. А она безусловно есть и программист
обязательно должен эту разницу учитывать.
Цитата(Ruslan1 @ Nov 3 2011, 12:20)

Я больше скажу- желание разместить данные по какому-либо физическому адресу может прийти в голову и при пользовании фон-неймановским ядром

Я ничего не говорил о размещении по физическому адресу. Я говорю о размещении данных в памяти разных типов.
Цитата(Палыч @ Nov 3 2011, 12:25)

Если Вы ведете речь о размещении массива, то - да, нестандартные ключевые слова для этого ввели в большенство трансляторов.
Разумеется о размещении, перед тем как пользоваться переменными, их нужно создать, а для этого подумать где им место. И в 8081 этот вопрос программист должен продумывать очень тщательно - какие переменные лучше поместить в DATA, а какие в IDATA - ошибки в выборе могут кардинально поменяь производительность.
Цитата(Палыч @ Nov 3 2011, 12:25)

Я же говорил об указателе: в Keil - "Generic Pointers", транслятор сам "разбирается" с типами памяти.
А, вы об этом уродстве? Вот уж не думал, что ими кто-то реально пользуется. Нужно быть идиотом, чтобы тщательно продумав о размещении переменных (DATA, IDATA или XDATA) после этого обращаться ко всем ним через generic указатели.
Цитата(Палыч @ Nov 3 2011, 12:25)

Если программист хочет разместить массив именно в конкретной памяти - то некоторая разница есть (при описании массива). Но, можно, и - "по-умолчанию" (не всегда эффективно и возможно). Про указатели - см. выше (Generic Pointers).
Вот именно! Вы прекрасно понимаете, что это сильно влияет на эффективность, но при этом заявляете новичкам, что дла программиста нет никакой разницы какая архитектура у процессора! Может не стоит разбрасываться такими вредными советами, тем более понимая их вредность?
Сообщение отредактировал 777777 - Nov 3 2011, 10:04