|
Гарвардская и фон неймовская, разница на практике? |
|
|
|
 |
Ответов
|
Nov 3 2011, 05:13
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Палыч @ Oct 31 2011, 14:42)  С точки зрения языка Си: в какой памяти размещен массив - разницы не будет, обращение к элементам массива будет одинаково (что-то типа M[i]). Другое дело - указатели, но эту проблему должны решать компиляторописатели - решили же эту проблему в Keil... В кейле это решили введением нестандартных ключевы слов. Цитата(_Pasha @ Nov 1 2011, 13:48)  Дык в ГЦЦ решено давным давно. Да ну? И как же это сделано? Неужели в стандарт языка ввели новое ключевое слово, означающее размещение переменной в памяти программ? Цитата(_Pasha @ Nov 1 2011, 13:48)  Не надо было бы пеарить обертки типа PROGMEM - не появилось бы надстроек соответствующих. Бы. Я ничего не понял в этом предложении. Нельзя ли поподробнее и по-русски? Цитата(Палыч @ Oct 31 2011, 14:42)  С точки зрения языка Си: в какой памяти размещен массив - разницы не будет, обращение к элементам массива будет одинаково (что-то типа M[i]). Другое дело - указатели, но эту проблему должны решать компиляторописатели - решили же эту проблему в Keil... Кстати о кейле: вообще-то топикстартер поставил вопрос "Какая разнится между гарвардской и фон неймовской архитектурой для С-программиста?" И вы дружно начали кричать, что разницы никакой. Но во-первых даже при размещении массива программист должен не просто написать M[i], а еще и указать в какой именно памяти он хочет его разместить - а значит разница для программиста уже есть. И после этого он должен пользоваться указателями соответствующего типа чтобы не перепутать обращение к разным типам памятей - и как после этого можно утверждать что для программиста разницы никакой?
|
|
|
|
|
Nov 3 2011, 08:20
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(777777 @ Nov 3 2011, 07:13)  Кстати о кейле: вообще-то топикстартер поставил вопрос "Какая разнится между гарвардской и фон неймовской архитектурой для С-программиста?" И вы дружно начали кричать, что разницы никакой. Но во-первых даже при размещении массива программист должен не просто написать M[i], а еще и указать в какой именно памяти он хочет его разместить - а значит разница для программиста уже есть. Вы считаете, что применение программистом слов "static" и "const" зависит от типа архитектуры ядра? Цитата(777777 @ Nov 3 2011, 07:13)  И после этого он должен пользоваться указателями соответствующего типа чтобы не перепутать обращение к разным типам памятей - и как после этого можно утверждать что для программиста разницы никакой? Давайте определимся. Вы говорите о проблемах и различии в си-программе не для гарвард-негарвард, а при написании программ на одном конкретном гарвардоподобном ядре при применении одного конкретного компилятора. И проецируете эти проблемы на все прцессоры и все компиляторы. Но это не так, есть гарвардоподобные ядра и компиляторы к ним, в которых описанных вами проблем нет. Я больше скажу- желание разместить данные по какому-либо физическому адресу может прийти в голову и при пользовании фон-неймановским ядром
|
|
|
|
|
Nov 3 2011, 10:03
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(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
|
|
|
|
|
Nov 4 2011, 19:32
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Ruslan1 @ Nov 4 2011, 01:21)  Перевожу. А вам не кажется, что вы говорите не об архитектуре (гарвард) а о микроконтроллере AVR? Я говорю об архитектуре. Цитата(Ruslan1 @ Nov 4 2011, 01:21)  Потому что есть например майкрочип (тоже гарвард), у которого всех описанных вами заморочек нет вообще? То есть как это нет? Как считать байт в W из ОЗУ? А как из памяти команд?
|
|
|
|
|
Nov 6 2011, 05:30
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(V_G @ Nov 6 2011, 04:06)  Глубоко копаете! Если имеется в виду ответ для начинающего, то не играет роли в большинстве случаев. Меня всегда удивляло высокомерие здешней публики. Сам факт наличия раздела "для начинающих" чего стоит! Я такого не видел ни на одном форуме! Неудивительно что мои предложения ликвидировать этот раздел не нашли понимания. Действительно, если не будет такого раздела, то как великие гуру будут удовлетворять свое ЧСВ? Да и тонкости в отличиях архитектур начинающему объяснять не следует, а то еще выучит и станет умнее вас, это же непорядок! Цитата(V_G @ Nov 6 2011, 04:06)  А когда дело дойдет до тонкостей, <...> Как же он дойдет до тонкостей, если вы их от него тщательно скрываете?!
|
|
|
|
|
Nov 6 2011, 09:36
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(V_G @ Nov 6 2011, 08:51)  Вообще-то я к гуру себя не причисляю, а реплика была всего лишь к тому, что все надо изучать постепенно. Если вывалить на голову начинающего сразу все нюансы-тонкости, то легко запутаться. Тут уже 2 страницы споров гуру между собой по нюансам, а всего-то нужен был коротенький ответ. Ну, и изучать эти нюансы-тонкости все-таки лучше на практике, а не по ответам на форуме. Тогда и скрыть что-то сложно будет. 1. Разницы для си-программиста нет никакой. 2. Есть нюансы при использовании кривых компиляторов, 777777 любезно упомянул об одном из них применительно к гарварду. Уверен, можно найти также кривой компилятор и для фон-неймана. Под "кривым" подразумевается компилятор, оставляющий программисту самому организовывать доступ к разным типам данных, расположенным в разной памяти. Хороший компилятор делает это сам, при его использовании программист не должен заниматься архитектурозависимыми вопросами вообще. Собственно в этом и смысл хорошего компилятора- взять на себя рутинную работу. 3. Мне неизвестны нюансы архитектуры, о которых должен знать си-программист. Если речь идет о том чтобы выжать максимальную эффективность, то программисту нужно знать не нюансы архитектуры, а нюансы конкретного компилятора и конкретного микроконтроллера вплоть до последней ревизии ерраты. Подчеркну, к архитектуре это не имеет никакого отношения.
|
|
|
|
|
Nov 7 2011, 05:35
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Ruslan1 @ Nov 6 2011, 13:36)  1. Разницы для си-программиста нет никакой. Смелое заявление! Цитата(Ruslan1 @ Nov 6 2011, 13:36)  2. Есть нюансы при использовании кривых компиляторов, 777777 любезно упомянул об одном из них применительно к гарварду. Уверен, можно найти также кривой компилятор и для фон-неймана. Под "кривым" подразумевается компилятор, оставляющий программисту самому организовывать доступ к разным типам данных, расположенным в разной памяти. Хороший компилятор делает это сам, при его использовании программист не должен заниматься архитектурозависимыми вопросами вообще. Собственно в этом и смысл хорошего компилятора- взять на себя рутинную работу. Фигасе заявочки! Да если компилятор решает за программиста где разместить те или иные данные, то его надо выкидывать нахрен! Даже const массивы нельзя располагать во флэш без ведома программиста - мало ли как мне захочется их проинициализировать, может это будет делать бутлоадер загружая их при включении по USART. А про const-указатели я уже писал. Забота компилятора лишь в том, чтобы следить за тем, чтобы программист не написал код, пишущий в эту область. Цитата(Ruslan1 @ Nov 6 2011, 13:36)  3. Мне неизвестны нюансы архитектуры, о которых должен знать си-программист. Если речь идет о том чтобы выжать максимальную эффективность, то программисту нужно знать не нюансы архитектуры, а нюансы конкретного компилятора и конкретного микроконтроллера вплоть до последней ревизии ерраты. Подчеркну, к архитектуре это не имеет никакого отношения. Еще более смелое заявление. Странно видеть программиста, исследующего отличия в ревизиях конкретного микроконтроллера, но полностью игнорирующего его архитектуру.
|
|
|
|
|
Nov 7 2011, 06:32
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(777777 @ Nov 7 2011, 09:35)  Фигасе заявочки! Да если компилятор решает за программиста где разместить те или иные данные, то его надо выкидывать нахрен! Даже const массивы нельзя располагать во флэш без ведома программиста - мало ли как мне захочется их проинициализировать, может это будет делать бутлоадер загружая их при включении по USART. А про const-указатели я уже писал. Забота компилятора лишь в том, чтобы следить за тем, чтобы программист не написал код, пишущий в эту область. А вот для того, чтобы программист мог реализовать все свои хотелки, и существуют нестандартные (и компиляторозависимые) расширения языка. Но, повторю уже неоднократно прозвучавшую мысль, к архитектуре МК это не имеет ни малейшего отношения
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Nov 7 2011, 07:41
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Harvester @ Nov 7 2011, 10:32)  А вот для того, чтобы программист мог реализовать все свои хотелки, и существуют нестандартные (и компиляторозависимые) расширения языка. Но, повторю уже неоднократно прозвучавшую мысль, к архитектуре МК это не имеет ни малейшего отношения Нестандартное компиляторозависимое расширение кейла для размещения данных в памяти DATA, IDATA и т.д., а также нестандартное расширение gcc PROGMEM для размещения данных в памяти программ - не имеют, оказывается, отношения к архитектурам этих МК! Всё, это конец, пора эту дискуссию завязывать.
|
|
|
|
Сообщений в этой теме
Zelepuk Гарвардская и фон неймовская Oct 28 2011, 19:33 Ruslan1 Цитата(Zelepuk @ Oct 28 2011, 22:33) Кака... Oct 28 2011, 19:42 Tiro Цитата(Ruslan1 @ Oct 28 2011, 22:42) Ника... Oct 28 2011, 19:46 stells Цитата(V_G @ Oct 29 2011, 03:24) Элемента... Oct 29 2011, 05:34  V_G Цитата(stells @ Oct 29 2011, 15:34) так э... Oct 29 2011, 06:43   Sergey_Aleksandrovi4 В МК с архитектурой Фон Неймана возможно поместить... Oct 29 2011, 10:36    dxp Цитата(Sergey_Aleksandrovi4 @ Oct 29 2011, 17... Oct 29 2011, 12:59      Палыч Поскольку язык Си был ориентирован на архитектуру ... Nov 3 2011, 11:55       777777 Цитата(Палыч @ Nov 3 2011, 15:55) Посколь... Nov 3 2011, 14:52          Ruslan1 Цитата(777777 @ Nov 5 2011, 19:25) Скорее... Nov 5 2011, 20:59                 Палыч Цитата(777777 @ Nov 7 2011, 11:41) Всё, э... Nov 7 2011, 11:57           ILYAUL Цитата(V_G @ Nov 6 2011, 04:06) И уж в лю... Nov 6 2011, 20:05    Палыч Цитата(777777 @ Nov 3 2011, 09:13) В кейл... Nov 3 2011, 08:25  Ruslan1 Цитата(777777 @ Oct 31 2011, 12:08) Агащя... Oct 31 2011, 13:02  _Pasha Цитата(777777 @ Oct 31 2011, 14:08) Агащя... Nov 1 2011, 09:48 Zelepuk Спасибо!
Получается стоит учитывать особенност... Oct 29 2011, 05:16 Dog Pawlowa Цитата(Zelepuk @ Oct 28 2011, 22:33) фон ... Oct 29 2011, 05:47 kan35 Неймановская безусловно ЛУЧШЕ из за линейного адре... Oct 29 2011, 12:44 Ruslan1 Цитата(kan35 @ Oct 29 2011, 15:44) Нейман... Oct 29 2011, 17:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|