|
|
 |
Ответов
|
Dec 17 2007, 10:35
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 3-08-07
Из: Орловская обл.
Пользователь №: 29 535

|
Спасибо sergik_vrn , попробую... А насчет массива: имеется добрая сотня значений меню, и в теле программы помнить какой элемент массива за что отвечает - нереально!!! Надо иметь бумажку, где все эти элементы сопоставляются - короче, гемороище... Проще указать каждой переменной адрес, где она будет лежать в RAM, а не использовать массив.
Спасибо за ответы...
|
|
|
|
|
Dec 17 2007, 10:52
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(Andrei_S @ Dec 17 2007, 13:35)  Спасибо sergik_vrn , попробую... А насчет массива: имеется добрая сотня значений меню, и в теле программы помнить какой элемент массива за что отвечает - нереально!!! Надо иметь бумажку, где все эти элементы сопоставляются - короче, гемороище... Проще указать каждой переменной адрес, где она будет лежать в RAM, а не использовать массив.
Спасибо за ответы... 1. тот вариант, что я привел - вовсе не оптимальный, просто в нем исправлены Ваши ошибки 2. адрес элемента массива это <имя_массива>+<номер элемента> 3. также настоятельно рекомендую воспользоваться массивом и не заниматься ерундой. судя из того, что я понял по приведенному исходнику, Вам массив и нужен, причем даже без всякой обрамляющей структуры пассаж насчет указания адресов "лежания" для переменных до моего понимания не дошел
|
|
|
|
|
Dec 17 2007, 11:35
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 3-08-07
Из: Орловская обл.
Пользователь №: 29 535

|
Цитата(sergik_vrn @ Dec 17 2007, 13:52)  1. тот вариант, что я привел - вовсе не оптимальный, просто в нем исправлены Ваши ошибки 2. адрес элемента массива это <имя_массива>+<номер элемента> 3. также настоятельно рекомендую воспользоваться массивом и не заниматься ерундой. судя из того, что я понял по приведенному исходнику, Вам массив и нужен, причем даже без всякой обрамляющей структуры
пассаж насчет указания адресов "лежания" для переменных до моего понимания не дошел Пояснение по адресам "лежания": имеется установочное меню, включающее в себя несколько десятков пунктов. Каждому пункту меню соответствует своя переменная. В процессе работы используются значения этих переменных. Если будет сделан массив, как Вы предлагаете, то мне придется помнить, какой из элементов массива за что отвечает. Да, будет очень удобно в этот массив переписывать данные, например, из ПЗУ в одном единственном цикле Код for(a=0;a<Lengh;a++){Array[a]=Read_Eprom(a);} , но в программе помнить о том, какая ячейка чему соответствует - весьма тяжело, и не исключены ошибки. Используя прямую адресацию в RAM, типа Код unsigned int P1x __at(0x00000000000000000) unsigned int P2x __at(0x00000000000000001) я смогу в одном цикле выполнить действия аналогичные примеры выше, но только с косвенной адресацией Код unsigned int *sptr;
sptr = & P1x; for(a=0;a<Lengh;a++;sptr++){*sptr=Read_Eprom(a);} Значения из Eprom автоматом перепишутся по нужным адресам. Только для этого я предполагаю явное указание адреса. А в теле программы читать и писать, например, пункт меню Baud_Rate гораздо понятнее и приятнее чем, например, Array[64]
|
|
|
|
|
Dec 17 2007, 11:48
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
Цитата(Andrei_S @ Dec 17 2007, 14:35)  ... Используя прямую адресацию в RAM, типа Код unsigned int P1x __at(0x00000000000000000) unsigned int P2x __at(0x00000000000000001) я смогу в одном цикле выполнить действия аналогичные примеры выше, но только с косвенной адресацией Код unsigned int *sptr;
sptr = & P1x; for(a=0;a<Lengh;a++;sptr++){*sptr=Read_Eprom(a);} Интересно, ну и что Вы хотели этим пояснить: Код unsigned int P1x __at(0x00000000000000000) unsigned int P2x __at(0x00000000000000001) Это не скомпилиться без явного приведения типа в нормальном компиляторе: Код sptr = & P1x; если P1x - структура.
|
|
|
|
|
Dec 17 2007, 12:01
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 3-08-07
Из: Орловская обл.
Пользователь №: 29 535

|
Цитата(Юрий Санвальд @ Dec 17 2007, 14:48)  Интересно, ну и что Вы хотели этим пояснить: Код unsigned int P1x __at(0x00000000000000000) unsigned int P2x __at(0x00000000000000001) Это не скомпилиться без явного приведения типа в нормальном компиляторе: Код sptr = & P1x; если P1x - структура. Код unsigned int P111 __at (0x40003000); unsigned int P112 __at (0x40003002);
int main(void){
unsigned int *aptr;
aptr = & P111; for(hhh=0;hhh<10;hhh++) { *aptr=hhh; aptr++; }
} Пардон, скомпилилось без вопросов...
|
|
|
|
|
Dec 17 2007, 12:26
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 3-08-07
Из: Орловская обл.
Пользователь №: 29 535

|
Цитата(aaarrr @ Dec 17 2007, 15:12)  Ага, только работать не будет (int по адресу 0x40003002). Честное слово, не могу понять, что Вам нужно получить в результате - структуру меню с возможностью загрузки из EEPROM? Зачем эти фиксированные адреса и прочие извращения? Имеется большое количество переменных. Я хочу как можно сильней упростить их перезапись (в том числе и в ПЗУ). Например писать: BaudRate = Read_Eprom(10); StopBit = Read_Eprom(11); и так сто раз весьма утомительно. Вариант с адресацией, на мой взгляд, избавит от рутины, к тому же имена переменных будут осмысленны, в отличие от массива. Может есть какие-то отлаженные решения?
|
|
|
|
Сообщений в этой теме
Andrei_S struct - непонятка с косвенной адресацией Dec 17 2007, 09:51 sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 12:51) Set... Dec 17 2007, 10:05 VladislavS Хотите массив - используйте!!!
typedef... Dec 17 2007, 10:18  Юрий Санвальд Цитата(sergik_vrn @ Dec 17 2007, 13:52) .... Dec 17 2007, 11:25       Юрий Санвальд Если уж все элементы однотипные, то чем тогда не п... Dec 17 2007, 12:34       sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 15:26) Име... Dec 17 2007, 12:34     Юрий Санвальд Цитата(Andrei_S @ Dec 17 2007, 15:01) Пар... Dec 17 2007, 12:18   sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 14:35) ...... Dec 17 2007, 12:20    tag Цитата(sergik_vrn @ Dec 17 2007, 15:20) у... Dec 18 2007, 10:45     Andrei_S Цитата(tag @ Dec 18 2007, 13:45) ...как в... Dec 18 2007, 11:48 zhevak присоединяюсь к sergik_vrn
Структура, все элемент... Dec 17 2007, 11:41 Юрий Санвальд Цитата(zhevak @ Dec 17 2007, 14:41) ...
С... Dec 17 2007, 12:01 Сергей Борщ Цитата(zhevak @ Dec 17 2007, 13:41) Струк... Dec 17 2007, 12:36  Andrei_S Цитата(Сергей Борщ @ Dec 17 2007, 15:36) ... Dec 17 2007, 12:52   sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 15:52) Воо... Dec 17 2007, 13:27    Andrei_S Большое спасибо всем!
Буду пробовать... Dec 17 2007, 13:33 vmp Почитайте про перечислимый тип (enum).
Именно он н... Dec 17 2007, 11:53 digital union {
unsigned char mass[10];
struct... Dec 17 2007, 13:28 digital по поводу enum:
не хорошо, так как заставляет сам... Dec 17 2007, 13:47 MALLOY2 ЦитатаГоспода, что-то не понимаю следующего:
Даю ... Dec 17 2007, 14:40 vet memset(&LocalSetup, 0, sizeof(Setup)) тогда уж... Dec 17 2007, 14:47 MALLOY2 А если такая ситуация
Кодfor (c=0; c<siz... Dec 17 2007, 16:29 Andrei_S Итак, общими усилиями получилось следующее:
имеетс... Dec 18 2007, 08:34  sergik_vrn Цитата(Andrei_S @ Dec 18 2007, 11:34) Ита... Dec 18 2007, 09:00   Andrei_S Цитата(sergik_vrn @ Dec 18 2007, 12:00) я... Dec 18 2007, 10:26  vmp Цитата(Andrei_S @ Dec 18 2007, 11:34) Но,... Dec 18 2007, 13:10 _dem Цитата..как вариант#define BAUD_RATE ... Dec 18 2007, 12:31 Andrei_S КодRead_EEPROM((u8 *)&config.info_... Dec 18 2007, 13:01 _dem Если типов данных сравнительно немного, сделайте о... Dec 18 2007, 14:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|