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

 
 
7 страниц V  « < 3 4 5 6 7 >  
Reply to this topicStart new topic
> Глюки компилятора IAR?, Важно! Код прошивки по непонятным причинам не стартует в МК AVR.
SasaVitebsk
сообщение Jan 25 2008, 13:36
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(DiMonstr @ Jan 25 2008, 17:31) *
В учебнике, который я изучаю, про работу с битовыми полями таким образом ничего нет. К примеру элементы структуры по этому учебнику описываюся проще, тип_переменная. О таком синтаксисе ничего не сказано. Эта фишка (и не только) уже самого компилятора зарытая и описанная в виде макроса где-то в хидерах или библиотеках.

Нет это чётко описано в самом компиляторе Си и в книгах тоже. Поменяйте книгу.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 25 2008, 13:58
Сообщение #62


Гуру
******

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



Цитата(DiMonstr @ Jan 25 2008, 15:31) *
Эта фишка (и не только) уже самого компилятора зарытая и описанная в виде макроса где-то в хидерах или библиотеках.
Докажите. Можно от противного - достаточно доказать, что битовые поля не упоминаются в стандарте языка С.


--------------------
На любой вопрос даю любой ответ
"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
DiMonstr
сообщение Jan 25 2008, 14:09
Сообщение #63


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Цитата(Сергей Борщ @ Jan 25 2008, 16:58) *

Я не говорю, что ни в одной литературе не написано о битовых поолях.
Вы бы сами какую книгу порекомендовали по Си?

Сообщение отредактировал DiMonstr - Jan 25 2008, 14:10
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 25 2008, 15:09
Сообщение #64


Гуру
******

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



Вы утверждали, что это "Эта фишка (и не только) уже самого компилятора зарытая". Т.е. снова, как и в начале ветки, во всем виноват компилятор а не ваше невежество.

Книга по С бывает одна: Керниган и Ритчи, "Язык программирования С". Второе (!) издание. Все остальные - ее толкования. Книга есть в интернете. Где искать - не подскажу, гугля в помощь.


--------------------
На любой вопрос даю любой ответ
"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
DiMonstr
сообщение Feb 9 2008, 19:41
Сообщение #65


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Цитата(Сергей Борщ @ Jan 25 2008, 18:09) *
Вы утверждали, что это "Эта фишка (и не только) уже самого компилятора зарытая". Т.е. снова, как и в начале ветки, во всем виноват компилятор а не ваше невежество.

Книга по С бывает одна: Керниган и Ритчи, "Язык программирования С". Второе (!) издание. Все остальные - ее толкования. Книга есть в интернете. Где искать - не подскажу, гугля в помощь.


Оптимизировал проект. Добавил ещё функций. Кое-что переписал. НО!!! Проблема осталась не смотря на все усилия!!! Хоть головой бейся о монитор с клавой, но программа в контроллере не запускается!!! Не знаю где капать! Весь инет перерыл. Подобного ни у кого не было! Что делать???
Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Feb 9 2008, 21:24
Сообщение #66


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



А может попробовать скомпилять проект в WinAVR? Да в принципе это последняя надеждаsad.gif А нееет, есть ещё вариант переписать код на асме....
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 9 2008, 22:09
Сообщение #67


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(DiMonstr @ Feb 10 2008, 00:24) *
А может попробовать скомпилять проект в WinAVR? Да в принципе это последняя надеждаsad.gif А нееет, есть ещё вариант переписать код на асме....
Есть еще вариант, если, как Вы здесь утверждаете, виноват компилятор и дело
до main не доходит, если, как Вы опять же утверждаете, Вы знаете Асм,
ну дык кто Вам мешал все это время не заниматься болтовней, а просто взять листинг до main,
перенести его в студию и найти место где компилятор ошибся...
И радостно нам об этом сообщить.

Что то мне подсказывает, что "Если" получилось много, и часть из них Вы не осилили 07.gif biggrin.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 9 2008, 23:17
Сообщение #68


Гуру
******

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



Цитата(singlskv @ Feb 10 2008, 01:09) *
Вы здесь утверждаете, виноват компилятор...

Можно это утверждение игнорировать начисто - я бегло просмотрел этот код. Полный мрак, начиная с переопределенной точки входа прямо в main(), деклараций переменных в header-ах, конструкций switch( константа ), отсутсвие volatile, обилия кривых макросов, & и && - по барабану,.....
В приложении, то, что подправлено за 15 минут - наверное до main() дойдет, но дальше smile.gif ....
Прикрепленные файлы
Прикрепленный файл  pwrc.rar ( 7.92 килобайт ) Кол-во скачиваний: 28
 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Feb 10 2008, 09:28
Сообщение #69


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Цитата(zltigo @ Feb 10 2008, 02:17) *

Я с Вами согласен. Сам ужаснулся, когда начал с самого начала просматривать код. Вот версия проекта, которая более менее доведена до ума. Заценитеsmile.gif
C Вашей прошивкой работоспособность кода я оценить не смогу. Для этой прошивки в хидере settings.h какие значения определены следующим именам:
#define IsCheckCRC
#define IsCheckRAM
#define IsCheckJUMP
#define IsCheckAnalogScheme
#define IsCheckBlock

Сообщение отредактировал DiMonstr - Feb 10 2008, 09:47
Прикрепленные файлы
Прикрепленный файл  pwrc_test.rar ( 41.14 килобайт ) Кол-во скачиваний: 30
 
Go to the top of the page
 
+Quote Post
forever failure
сообщение Feb 10 2008, 10:58
Сообщение #70


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Хинт: уберите весь (да, весь, вообще весь) код, до которого не доходит исполнение, оставьте только то место, на котором исполнение затыкается. Попытайтесь локализовать место, на котором программа затыкается.

ЗЫ. switch от (CurrentDevice) т.е. от константы - категорически не труъ, как уже было выше замечено. Уберите.

Ещё, хотелось бы Ваших пояснений, относительно вот этого участка кода (возможно, здесь одна из ошибок):

Value = slow_crc16(Value,(unsigned char __flash *)0, (unsigned long)&__checksum); /* здесь передаётся в третьем параметре указатель */
Value = slow_crc16(Value,(unsigned char __flash *)&zero,2); /* а здесь целое */

Что вообще должно быть здесь выполнено ?
Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Feb 10 2008, 12:32
Сообщение #71


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Цитата(forever failure @ Feb 10 2008, 13:58) *
Хинт: уберите весь (да, весь, вообще весь) код, до которого не доходит исполнение, оставьте только то место, на котором исполнение затыкается. Попытайтесь локализовать место, на котором программа затыкается.

В том-то и дело, что я незнаю до какого адреса доходит выполнение программы. Я делал так, сразу после main() инициализировал USART интерфейс и atmega передавала в цикле байты на комп, пока не получит ответа. Теперь после прошивки я точно мог узнать работает код или нет. Так и сделал, отключив сначала все функции тестирования. Заработало. Затем начал экспериментировать разрешая выполнение тестов и снова прошивая. Ну и что Вы думаете? Выполнение программы, то доходило до команды посылки байта, то через раз ничего не работало, то работало стабильно. Получается прога затыкается перед функцией main() на стадии инициализации стека, озу и т.д. Верно?

Цитата
ЗЫ. switch от (CurrentDevice) т.е. от константы - категорически не труъ, как уже было выше замечено. Уберите.

Понял, сделаем.

Цитата
Ещё, хотелось бы Ваших пояснений, относительно вот этого участка кода (возможно, здесь одна из ошибок):
Value = slow_crc16(Value,(unsigned char __flash *)0, (unsigned long)&__checksum); /* здесь передаётся в третьем параметре указатель */
Value = slow_crc16(Value,(unsigned char __flash *)&zero,2); /* а здесь целое */
Что вообще должно быть здесь выполнено ?

Здесь производится подсчет CRC прошивки и сравнение с CRC, которая сохраняется в конец файла прошивки на стадии компиляции.
Код
unsigned short slow_crc16(unsigned short sum, unsigned char __flash *p, unsigned long len)
{
  while (len--)
  {
    int i;
    unsigned char byte = *p++;
    
    for (i = 0; i < 8; ++i)
    {
      unsigned long osum = sum;
      sum <<= 1;
      if (byte & 0x80)
        sum |= 1;
      if (osum & 0x8000)
        sum ^= 0x1021;
      byte <<= 1;
    }
  }
  return sum;
}


Этот код к проблеме не имеет отношения, без него такая же лажа. Он был взят из "апноутов".
Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Feb 10 2008, 13:35
Сообщение #72


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Попутно ещё вопрос. Что происходит если программа переходит на адрес по которому лежит код команды 0xFFFF?
И чем лучше забивать свободное пространство памяти программ 0x0000, 0xFFFF или 0x1895
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Feb 10 2008, 14:56
Сообщение #73


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



0xFFFF так же как NOP отрабатывается. Ничем забивать не надо. Если программа переходит по неправильному адресу, то выкидывать такую программу. Если такой переход вызван аппаратным сбоем - заводите собаку и лечите железо.
Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Feb 11 2008, 20:17
Сообщение #74


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Как в IAR написать код, который будет выполняться перед вызовом основной функции main()? Компилятор располагает такими возможностями?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 11 2008, 20:48
Сообщение #75


Гуру
******

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



Цитата(DiMonstr @ Feb 11 2008, 23:17) *
Компилятор располагает такими возможностями?

Да, но придется взглянуть на документацию smile.gif __low_level_init(), либо просто вызвать из startup....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:25
Рейтинг@Mail.ru


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