|
Непонятный глюк |
|
|
|
Jun 17 2011, 13:22
|
Частый гость
 
Группа: Участник
Сообщений: 111
Регистрация: 2-03-10
Пользователь №: 55 768

|
Контроллер at91sam9g20, компилятор keil 4.03, загрузчик атмеловский.
Компилирую, зашиваю, все работает. Меняю значение одной переменной, опять компилирую, зашиваю. Перестает отвечать Usart. При этом меняется размер бинарного файла, хотя переменная char и за диапазон не выходит.
С чем это может быть связано, с компилятором, с памятью, с загрузчиком?
|
|
|
|
|
Jun 17 2011, 14:28
|

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

|
QUOTE (wmakc @ Jun 17 2011, 16:22)  С чем это может быть связано, с компилятором, с памятью, с загрузчиком? Могу с удручающе высокой вероятностью утверждать, что "с компилятором, с памятью, с загрузчиком" это НЕ связано. Связано только с тем, что Вы написали.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 18 2011, 08:33
|
Частый гость
 
Группа: Участник
Сообщений: 111
Регистрация: 2-03-10
Пользователь №: 55 768

|
переменная unsigned char num = 1; меняю на unsigned char num = 2; Меняется размер, но раз так и должно быть, значит не в этом дело. Больше изменений никаких, причем, если добавить еще одну переменную, то usart опять продолжает работать. Также была еще одна непонятная проблема, когда объявлял массив char непосредственно перед функцией его использующей, то у меня переставал нормально работать кодек jpeg(Даже правильнее не переставал, а просто сжимал картинку неправильно), но стоило изменить его размер и все начинало работать нормально. Только вот этот массив никак не используется при сжатии. Может все связано с тем, что некоторые массивы у меня очень большие, до мегабайта могут доходить и память под них неправильно выделяется? Иногда помогает взять старый проект и скопировать в него основной файл с main.
|
|
|
|
|
Jun 18 2011, 12:25
|

Местный
  
Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594

|
Цитата(wmakc @ Jun 18 2011, 15:34)  переменная unsigned char num = 1; меняю на unsigned char num = 2;
Иногда помогает взять старый проект и скопировать в него основной файл с main. Обычно, если действительно хочется получить помощь, соискатель сообщает не только как объявляется переменная, но и *где* объявляется, и как она используется. То есть увидеть бы кусочек кода, сказать чего б было проще. Да и мысли излагать бы пояснее: зачем чего-то копировать в старый проект? Вы, вероятно догадываетесь, что показанные Вами конструкции вида "unsigned char num = 1;" тыщи программёров использовали по стопицот раз и, стало быть, дело не в них. Весьма не исключено, что Вы её, конструкцию, используете хитрым способом и, например, отыскали баг линкера, связанный, скажем, с выравниванием или инициализацией статиков.
|
|
|
|
|
Jun 18 2011, 13:02
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(svss @ Jun 18 2011, 16:25)  что Вы её, конструкцию, используете хитрым способом и, например, отыскали баг линкера, связанный, скажем, с выравниванием или инициализацией статиков. Только вот вероятность обнаружения багов линкера\компилятора очень мала. 99,9% - это баг программы, написанной топикстартером
|
|
|
|
|
Jun 25 2011, 13:52
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(wmakc @ Jun 22 2011, 22:56)  Главное что я понял, так это то, что лучше не использовать никакую оптимизацию вообще. Действительно парадоксальный вывод. Вы просто не умеете их готовить. Снижать уровень оптимизации в надежде скрыть ошибки в коде - это недальновидная стратегия. Эти же ошибки могут вылезти и по другим причинам. Вообще-то разработчики наоборот стараются сделать так, чтобы на этапе разработки вскрылось как можно больше багов. Для этого включают всякие предупреждения компилятора и даже - о ужас! - устраивают разнообразные стресс-тесты, чтобы отловить изъяны в системе. Вы же подобно страусу прячете голову в песок в надежде, что баги пройдут стороной. Не пройдут.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|