Страница 1 из 2
вопрос к знатокам Си
Добавлено: Вс окт 22, 2006 19:46:53
Sanchez
в качестве домашки в универе поступила задачка...
в кратце не могу запустить функцию корня.
sqrt(a) , выдаёт ашипку.
среда borlandC++.
подключал модули stdio.h и math.h.
и в чем тут может быть собака зарыта, не подскажете?

Добавлено: Вс окт 22, 2006 19:50:40
Max
Так а ошибка то какая?

Добавлено: Вс окт 22, 2006 20:09:07
avr123.nm.ru
sqrt(a);
посмотрите help - там примеры есть.
Добавлено: Сб июл 26, 2008 09:44:19
Илья79
как сделать на С чтобы данные прямиком сохранить в регистр, а потом из него извлечь
это нужно для того что бы переждать RESET
Добавлено: Сб июл 26, 2008 10:14:00
tych
Может лучше в eeprom записать ? или во внешнюю память.
А в регистры запись это есть в FAQ на моей домашней страничке.
Добавлено: Сб июл 26, 2008 17:04:18
Аксель
Тема была начата в разделе форума "интеграция с пк". Так в общем разъяснилось
...
Добавлено: Сб июл 26, 2008 17:19:17
ARV
расскажите, что такое вы придумали, что вам надо записать в регистр и переждать RESET... если я не забыл все - ОС не даст вашей программе что-то сохранить для себя в регистрах так, чтобы после сброса оно уцелело...
для доступа к регистрам процессора никаких средств не надо - сделайте ассемблерную вставку в вашей программе и пишите в его регистры, что хотите... но проживет это не дольше, чем завершится ваша программа...
для доступа к регистрам видеокарты, например, или портам ввода-вывода компьютера, или напрямую к ОЗУ - в Windows придется использовать специальные библиотеки. Я использую WinIO, могу ее порекомендовать. Однако, наличие доступа к аппаратным портам и памяти ПК не гарантирует, что после RESET там что-то вы найдете полезное для себя... Зато повышаются шансы грохнуть систему

Добавлено: Сб июл 26, 2008 23:34:07
Mozart
как сделать на С чтобы данные прямиком сохранить в регистр, а потом из него извлечь
это нужно для того что бы переждать RESET
запишите всё это в файл сохраните... потом ресет... потом открыть файл прочитать... потом опять затереть и записать новое... потом опять ресет... и т.д.
ах да код...
Код: Выделить всё
//....
FILE *streamFile;
streamFile = fopen("save.cfg","r");
if (streamFile == NULL)
//error; exit();
fclose(streamFile);
streamFile = fopen("save.cfg","w");
fprintf(streamFile, "data");
fclose(streamFile);
//...
Добавлено: Вс июл 27, 2008 00:05:00
Yellow Tiger
ARV писал(а):если я не забыл все - ОС не даст вашей программе что-то сохранить для себя в регистрах так, чтобы после сброса оно уцелело...
Да тут и ОС неважна - сразу после ресета отрабатывает код BIOS и способов упросить его обращаться бережнее с содержимым регистров ("
мы же не сохранились!!!") не предусмотрено.

Добавлено: Вс июл 27, 2008 00:08:34
Mozart
вот от делать нечего...
Код: Выделить всё
FILE *stream;
char *xz = "c:\\Denis.txt";
if (!fopen(xz, "r"))
{
ShowMessage("file not exists");
stream = fopen(xz,"w");
fprintf(stream, "Denis");
}
else
stream = fopen(xz,"r");
char *data;
int N;
N = filesize(stream);
data = new char (N);
fread(data, N, 1, stream);
fclose(stream);
//......
delete [] data;
это всё запустить в во второй поток... и будет вам маленькое счастье... наверно...
Добавлено: Вс июл 27, 2008 08:47:10
Илья79
Огромное спасибо! Не ожидал столько ответов.
Буду разбираться.
видно не в ту тему написал, не бейте сильно
Это для МК АТ89с52
Этот режим работы не я придумал, когда увидел
вот и мучаюсь

Добавлено: Вс июл 27, 2008 10:12:52
Mozart
мля... ещё проще... есть прерывание по сбросу... точнее будет так... после сброса всё начинается выполняться с нулевого адреса, вот там надо написать ссылку на функцию которая будет вам записывать значения нужных регистров...
Добавлено: Вс июл 27, 2008 10:56:21
Илья79
Я так и пробовал сделать вставляя команды на asm, но компилятор air не признает asm.
вот ищу команду на С что бы вставить/извлечь в регистр.
разбираюсь с компилятором WinAVR, там это можно вставить команды на asm

Добавлено: Вс июл 27, 2008 12:32:16
ARV
Илья79, судя по всему, вам надо или бросить вообще эту затею, или все же начать с изучения МК, с которым вы работаете. AT89C52 и компилятор WinAVR - это абсолютно несовместимые вещи, и если вы взялись за них - это говорит о вашей компетентности (извините за резкость, но это так). Посему - см. выше: или устраняйте некомпетенстность, или откажитесь от затеи.
P.S. При сбросе любого МК сохраняется содержимое его ОЗУ (в отличие от регистров, многие из которых могут инициализироваться) - сохраняйте нужные вам данные в переменных, жестко привязанных к определенным адресам ОЗУ - и будет вам счастье. Самое меньшее, что для этого надо сделать - просто использовать указатель.
Добавлено: Вс июл 27, 2008 12:47:05
Илья79
спасибо ARV, а я тут пытался откомпилировать на WinAVR для АТ89С52, только безрезультатно, ни кто про это мне не говорил
у меня на схеме есть микросхема памяти АТ24с16, буду пробовать туда писать
Добавлено: Вс июл 27, 2008 16:15:56
ARV
вам надо пережить СБРОС или ОТКЛЮЧЕНИЕ ПИТАНИЯ? про то, как пережить сброс я писал - EEPROM вовсе необязательно для этого, а вот снятие питания - тут да, только EEPROM
Добавлено: Вс июл 27, 2008 19:30:13
Mozart
у at89 насколько мне память не изменяет архитектура 51ого??? тогда в винавр у вас ничего не получится...
а вообще нафига вам нужно слхранять значения регистров?
Добавлено: Вс июл 27, 2008 20:01:41
Илья79
получается так:
запускается программа в МК
работает 1 сек
приходит сигнал сброса
и все повторяется за ново
хочу сохранить данные для дальнейшей работы программы после сброса.
Добавлено: Вс июл 27, 2008 20:02:30
Mozart
почему так мало работает?? может у вас вообще питание не стабильно??
Добавлено: Вс июл 27, 2008 20:10:45
ARV
Илья79 писал(а):получается так:
запускается программа в МК
работает 1 сек
приходит сигнал сброса
и все повторяется за ново
хочу сохранить данные для дальнейшей работы программы после сброса.
тогда размещайте важные данные в свободном ОЗУ - оно при сбросе не портится