Страница 1 из 2

вопрос к знатокам Си

Добавлено: Вс окт 22, 2006 19:46:53
Sanchez
в качестве домашки в универе поступила задачка...
в кратце не могу запустить функцию корня.
sqrt(a) , выдаёт ашипку. :cry:
среда 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 и способов упросить его обращаться бережнее с содержимым регистров ("мы же не сохранились!!!") не предусмотрено. 8)

Добавлено: Вс июл 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
Огромное спасибо! Не ожидал столько ответов.
Буду разбираться.
видно не в ту тему написал, не бейте сильно :o
Это для МК АТ89с52
Этот режим работы не я придумал, когда увидел :shock:
вот и мучаюсь :cry:

Добавлено: Вс июл 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 сек
приходит сигнал сброса
и все повторяется за ново

хочу сохранить данные для дальнейшей работы программы после сброса.
тогда размещайте важные данные в свободном ОЗУ - оно при сбросе не портится