|
Гарвардская и фон неймовская, разница на практике? |
|
|
|
 |
Ответов
|
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 из ОЗУ? А как из памяти команд?
|
|
|
|
Сообщений в этой теме
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         777777 Цитата(Ruslan1 @ Nov 5 2011, 16:34) res =... Nov 5 2011, 17:25          Ruslan1 Цитата(777777 @ Nov 5 2011, 19:25) Скорее... Nov 5 2011, 20:59          V_G Цитата(777777 @ Nov 6 2011, 03:25) Неужел... Nov 6 2011, 00:06           777777 Цитата(V_G @ Nov 6 2011, 04:06) Глубоко к... Nov 6 2011, 05:30            V_G Цитата(777777 @ Nov 6 2011, 15:30) Как же... Nov 6 2011, 06:51             Ruslan1 Цитата(V_G @ Nov 6 2011, 08:51) Вообще-то... Nov 6 2011, 09:36              777777 Цитата(Ruslan1 @ Nov 6 2011, 13:36) 1. Ра... Nov 7 2011, 05:35               Harvester Цитата(777777 @ Nov 7 2011, 09:35) Фигасе... Nov 7 2011, 06:32                777777 Цитата(Harvester @ Nov 7 2011, 10:32) А в... Nov 7 2011, 07:41                 Палыч Цитата(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
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|