|
|
  |
Простые вопросы по IAR |
|
|
|
Sep 3 2007, 21:15
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Sep 4 2007, 09:50
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Sep 4 2007, 11:41
|

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

|
Цитата strucr вместо struct. Очепятка. В исходниках верно написано.
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Sep 5 2007, 08:25
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 5 2007, 12:08
|

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

|
Цитата(Beginning @ Sep 5 2007, 14:50)  А что вы имели под "лето/зима/временная_она"? В смысле летнее/зимнее время. Мне оно не нужно. На час вперёд и назад можно руками перевести. Ну не нужно, так не нужно (хотя не красиво ) тогда часы идут по локальному времени а находитесь Вы все равно где, пусть и в Гринвиче  . Цитата Или здесь где-то засада зарыта? Если Вы живете по Гринвичу/UTC называя это своим локальным временем, то никаких проблем нет. Проблемы с зонами и переходами лето/зима. В случае часов по гринвичу они НИКОГДА не переставляются и вычисляется только поправка. В случае системных часов по локальному времени ВАМ ПРИДЕТСЯ ПЕРЕСТАВЛЯТЬ ЧАСЫ, что само по себе может быть неудобным и в придачу возникают неопределенности, например, Вы включили устройство в 2:30 минут (по системныи часам) в день перехода веремени - который час? Ответ не возможен без дополнительного знания о том какое время лето/зима сейчас часы показывают.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 6 2007, 13:11
|

Знающий
   
Группа: Свой
Сообщений: 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; Вообще то логично.
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|