реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> Простые вопросы по IAR
Beginning
сообщение Sep 2 2007, 18:12
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Я 24 часа на ногах в монитор смотрю. У меня в голову не то что, бы слово time не приходит, я уже частенько ловлю себя на мысле что, тупо смотрю в монитор и ничего не делаю.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
Beginning
сообщение Sep 3 2007, 19:04
Сообщение #32


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Помогите найти засаду. Использую функцию localtime().

time_t n_sec;
struct tm *tm_p;

n_sec=time_;
tm_p = localtime(&n_sec);

Так вот. Код компилируется, но когда зашивается в проц, то проц виснет. Может какие специальные настройки надо. Она вроде кучу использует.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 3 2007, 21:15
Сообщение #33


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Beginning @ Sep 3 2007, 22:04) *
Так вот. Код компилируется, но когда зашивается в проц, то проц виснет. Может какие специальные настройки надо. Она вроде кучу использует.
n_sec=1234;
tm_p = localtime(&n_sec);
И в симулятор, по шагам. Этот код не работает с периферией, поэтому отсимулироваться должен на "хорошо" и "отлично".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 4 2007, 07:34
Сообщение #34


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Сергей Борщ @ Sep 4 2007, 00:15) *
И в симулятор, по шагам.
Последовал своему совету. Функция действительно интересная. Она требует наличия сегмента HEAP и возвращает указатель на структуру. Казалось бы, она выделяет динамическую память. Ан нет, она возвращает указатель на статически выделенную область памяти в DATA_Z, а HEAP не используется совсем. Поэтому, если интуитивно попытаться осводить память под возвращенное значение (delete tm_p) можно получить крушение всей памяти. Угадал?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Beginning
сообщение Sep 4 2007, 09:01
Сообщение #35


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



В симуляторе в функцию входит и выходит (как там винипух говорил). Но при зашитии в проц он фиснит. Т.е. код выолняется нормально, но когда доходит до localtime() зависает. Когда просматривал asm функции, то всречал редкие коментарии вставленные IAR типа "malloc" или "heap".

delete tm_p - это не использовал

Определяю структуру в main.c как глобальную:

struct {
uint8 a[6];
uint8 b[5];
uint8 c[4];
uint8 d[3];
uint8 e[3];
uint8 f[6];
} data;

В другом файле хочу использовать её:

extern strucr data;

data.a[0]=10;

Возникает предупреждение:
Warning[Pe1000]: a storage class may not be specified here E – на вот это ”extern strucr data;

И далее ошибки:

Error[Pe020]: identifier "data" is undefined

В чём засада?


Пробывал обычный int x; в другом файле extern int x; Всё прокатывает. Struct воспринимается же, тоже как переменная. Но не работает.

Сообщение отредактировал Beginning - Sep 4 2007, 09:02


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 4 2007, 09:50
Сообщение #36


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Beginning @ Sep 4 2007, 12:01) *
В симуляторе в функцию входит и выходит (как там винипух говорил). Но при зашитии в проц он фиснит. Т.е. код выолняется нормально, но когда доходит до localtime() зависает.
Ну, возможно ваша версия использует heap. Вы еще где-то используете malloc, new и т.д.? Если нет, сколько памяти вы выделили под сегмент HEAP? Возможно зависание происходит из-за невозможности выделить достаточно памяти. Хотя тогда должно и в симуляторе виснуть. Я все же склонен считать, что чудес не бывает и "зависание" происходит по причине нехватки памяти, например - стека.
Цитата(Beginning @ Sep 4 2007, 12:01) *
Определяю структуру в main.c как глобальную:
А ведь говорили - внимательно прочитайте учебник про extern. Когда вы компилируете другой файл, компилятор понятия не имеет ни о main.c, ни о том, какие поля есть у описанной там структуры.
Цитата(Beginning @ Sep 4 2007, 12:01) *
Возникает предупреждение:
Warning[Pe1000]: a storage class may not be specified here E – на вот это ”extern strucr data;
strucr вместо struct.
Цитата(Beginning @ Sep 4 2007, 12:01) *
И далее ошибки:

Error[Pe020]: identifier "data" is undefined

В чём засада?
Пробывал обычный int x; в другом файле extern int x; Всё прокатывает.
Потому что int, char, float, указатели - это встроенные типы. А структуры - это типы, определяемые пользователем. Попробуйте так:

"в другом файле":
extern struct {
uint8 a[6];
uint8 b[5];
uint8 c[4];
uint8 d[3];
uint8 e[3];
uint8 f[6];
} data;

Потом когда захотите внести изменение в эту структуру и полезете по всем файлам искать и править ее объявление - прочитайте в букваре по С про заголовочные файлы.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 4 2007, 10:13
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Сергей Борщ @ Sep 4 2007, 10:34) *
Функция действительно интересная.

Она много еще чего требует - установки временной зоны, правил перехода летнее/зимнее время ...
Попробуйте для начала gmtime(). А потом уже на локальное переходить.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Beginning
сообщение Sep 4 2007, 11:41
Сообщение #38


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Цитата
strucr вместо struct.


Очепятка. В исходниках верно написано.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
Beginning
сообщение Sep 5 2007, 07:09
Сообщение #39


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Попробывал использовать Гринвичское время gmtime(), всё заработало наура.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 5 2007, 08:25
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Beginning @ Sep 5 2007, 10:09) *
Попробывал использовать Гринвичское время gmtime(), всё заработало наура.

Ну если лето/зима/временная_она не нужны, что маловероятно, то пользуйтесь. В противном случае разбирайтесь с IARовской _Tzoff(void), которая отвечает за все вышеперечисленное и теми параметрами которыми она пользуется.
Я лично с начала 90x, когда передомною возникла такая проблема для встоенной системы ушел на "свою" сделаннаю по мотивам борландовской библиотечной, но со статическим tm и 'универсальным' 16bit идентификатором летнего времени
[StartMonth]
[EndMonth]
[Style]
[ChangeHour]
задаваемым в конфигурации.

Кстати, совет - системные часы должны идти по Гринвичу, а не по локальному времени, как это в свое время сделали недоумки( это не ругательство это констатация факта) из MS.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Beginning
сообщение Sep 5 2007, 11:50
Сообщение #41


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



А что вы имели под "лето/зима/временная_она"? В смысле летнее/зимнее время. Мне оно не нужно. На час вперёд и назад можно руками перевести. А почем, мне надо использовать в системе именно время по Гринвичу? Это автономная система с часами реального времени (возвращает int32 – количество секунд). Получил с этих часов время, отправил в gmtime() и забрал полученные часы, дни, месяцы и др. из структуры. Или здесь где-то засада зарыта?


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 5 2007, 12:08
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Beginning @ Sep 5 2007, 14:50) *
А что вы имели под "лето/зима/временная_она"? В смысле летнее/зимнее время. Мне оно не нужно. На час вперёд и назад можно руками перевести.

Ну не нужно, так не нужно (хотя не красиво ) тогда часы идут по локальному времени а находитесь Вы все равно где, пусть и в Гринвиче smile.gif.
Цитата
Или здесь где-то засада зарыта?

Если Вы живете по Гринвичу/UTC называя это своим локальным временем, то никаких проблем нет.
Проблемы с зонами и переходами лето/зима. В случае часов по гринвичу они НИКОГДА не переставляются и вычисляется только поправка. В случае системных часов по локальному времени ВАМ ПРИДЕТСЯ ПЕРЕСТАВЛЯТЬ ЧАСЫ, что само по себе может быть неудобным и в придачу возникают неопределенности, например, Вы включили устройство в 2:30 минут (по системныи часам) в день перехода веремени - который час? Ответ не возможен без дополнительного знания о том какое время лето/зима сейчас часы показывают.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Beginning
сообщение Sep 6 2007, 07:35
Сообщение #43


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Как-то странно работает float.
Например:
float f;
int x=56;
f= 4567/x;
// f=81,5535…
f*=100;
//f должен быть равен 8155,35…
x=f;
и получаем х=8100;

Вобщем вот это “f*=100;” похоже умножает только целую часть.

Мне надо получить дробную, в чём засада.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 6 2007, 08:02
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



А что, интересно, должно было получиться, если делить int на int ?
Код
float x=56;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Beginning
сообщение Sep 6 2007, 13:11
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



const uint8 x[4][4]= { (1,2,3,4),
(1,2,3,4),
(1,2,3,4),
(1,2,3,4)
};

Почему на это выражение ругается.
Выдаёт:
Error[Pe057]: this operator is not allowed in a constant expression


float x=56;

Вообще то логично. a14.gif


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 5 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 05:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016