|
|
  |
Глюки компилятора IAR?, Важно! Код прошивки по непонятным причинам не стартует в МК AVR. |
|
|
|
Jan 25 2008, 14:09
|
Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706

|
Цитата(Сергей Борщ @ Jan 25 2008, 16:58)  Я не говорю, что ни в одной литературе не написано о битовых поолях. Вы бы сами какую книгу порекомендовали по Си?
Сообщение отредактировал DiMonstr - Jan 25 2008, 14:10
|
|
|
|
|
Feb 9 2008, 19:41
|
Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706

|
Цитата(Сергей Борщ @ Jan 25 2008, 18:09)  Вы утверждали, что это "Эта фишка (и не только) уже самого компилятора зарытая". Т.е. снова, как и в начале ветки, во всем виноват компилятор а не ваше невежество.
Книга по С бывает одна: Керниган и Ритчи, "Язык программирования С". Второе (!) издание. Все остальные - ее толкования. Книга есть в интернете. Где искать - не подскажу, гугля в помощь. Оптимизировал проект. Добавил ещё функций. Кое-что переписал. НО!!! Проблема осталась не смотря на все усилия!!! Хоть головой бейся о монитор с клавой, но программа в контроллере не запускается!!! Не знаю где капать! Весь инет перерыл. Подобного ни у кого не было! Что делать???
|
|
|
|
|
Feb 9 2008, 22:09
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

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

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

|
Цитата(singlskv @ Feb 10 2008, 01:09)  Вы здесь утверждаете, виноват компилятор... Можно это утверждение игнорировать начисто - я бегло просмотрел этот код. Полный мрак, начиная с переопределенной точки входа прямо в main(), деклараций переменных в header-ах, конструкций switch( константа ), отсутсвие volatile, обилия кривых макросов, & и && - по барабану,..... В приложении, то, что подправлено за 15 минут - наверное до main() дойдет, но дальше  ....
Прикрепленные файлы
pwrc.rar ( 7.92 килобайт )
Кол-во скачиваний: 28
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 10 2008, 09:28
|
Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706

|
Цитата(zltigo @ Feb 10 2008, 02:17)  Я с Вами согласен. Сам ужаснулся, когда начал с самого начала просматривать код. Вот версия проекта, которая более менее доведена до ума. Зацените  C Вашей прошивкой работоспособность кода я оценить не смогу. Для этой прошивки в хидере settings.h какие значения определены следующим именам: #define IsCheckCRC #define IsCheckRAM #define IsCheckJUMP #define IsCheckAnalogScheme #define IsCheckBlock
Сообщение отредактировал DiMonstr - Feb 10 2008, 09:47
|
|
|
|
|
Feb 10 2008, 10:58
|
Местный
  
Группа: Участник
Сообщений: 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); /* а здесь целое */
Что вообще должно быть здесь выполнено ?
|
|
|
|
|
Feb 10 2008, 12:32
|
Частый гость
 
Группа: Свой
Сообщений: 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; } Этот код к проблеме не имеет отношения, без него такая же лажа. Он был взят из "апноутов".
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|