Системные вызовы не работают в Atmel AVR Studio (с ASF)

Я не получаю ответов на форуме AVR Freaks и задаюсь вопросом, может ли кто-нибудь здесь мне помочь.

Ответ может лежать в этом ТАК вопросе, но я не уверен, почему это было бы необходимо.

По сути, у меня есть мой первый проект Atmel (AVR studio 6, процессор UC3). Код компилируется и связывается, и я могу загрузить его на плату Atmel и выполнить пошаговое выполнение в отладчике.

Однако, когда я пытаюсь пройти (или запустить до точки останова в строке после) (действительный) вызов sprintf(), malloc() или memcpy() (могут быть и другие, которые я еще не обнаружил), IDE никогда не возвращается к следующей строке моего кода, просто кажется, что она зависает или работает вечно.

[Примечание] Оптимизация компилятора отключена

Нужно ли мне устанавливать некоторые параметры компоновщика (например, статическую ссылку (что я пробовал, но это не помогло)? Или собрать с какой-то библиотекой?

Что меня смущает, так это то, что компиляторы кода и ссылки - что линкуется, когда я вызываю эти стандартные функции? Если мне нужно что-то еще, я ожидаю ошибки компилятора или компоновщика, но не получаю - так почему мой код не запускается?

Извините за такой глупый вопрос n00nb, но это мой первый проект микроконтроллера.


person Mawg says reinstate Monica    schedule 16.02.2013    source источник
comment
Пробовали ли вы входить в звонки? Вы можете оказаться в стране сборки AVR, но, по крайней мере, вы сможете узнать, что дает сбой.   -  person nneonneo    schedule 16.02.2013


Ответы (3)


Я обнаружил, что ЦП на моей плате является инженерным образцом и не поддерживается Atmel Studio без нового файла io.h.

Я примерно понял это из этого вопроса: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=106652

Извините, что побеспокоил вас.

person Mawg says reinstate Monica    schedule 05.03.2013

что связывается, когда я вызываю эти стандартные функции?

AVR-libc, реализация стандартной библиотеки C, перенесенная на платформу AVR.

так почему мой код не запускается?

Ошибки компилятора и ошибки времени выполнения даже не связаны. Обе эти строки являются допустимыми C, и они компилируются, однако в большинстве систем я ожидаю, что они выгрузят ядро:

int x = 1 / 0;
*(int *)0 = 41;

Так что это может быть либо:

  • ошибка в стандартной библиотеке (очень маловероятно) или
  • ошибка в онлайн-отладчике (очень маловероятно) или
  • может быть, вы просто ожидаете чего-то, что не должно произойти?
person Community    schedule 16.02.2013
comment
+1 @H2CO3 +1 Замечание о недопустимости, но: я попробовал несколько очень простых примеров в начале моего main(). char s[32]; sprintf(s, "forty two =%d \n", 42); и т. д. Для memcpy() я убедился, что источник не равен нулю, в месте назначения достаточно места, что источник и место назначения не перекрываются. И т. д., и т. д. Короче говоря, я убежден, что код в порядке, особенно если он работает в режиме симулятора AVR Studio, а также работает с Netbeans с Cygwin. Я твердо верю, что это просто незнание настроек проекта, возможно, настроек компоновщика с моей стороны. Вы можете помочь? - person Mawg says reinstate Monica; 16.02.2013
comment
@Mawg Работает ли он на самом AVR без отладки? т. е. просто запустите его в режиме выпуска или что-то еще, не подключая отладчик. - person ; 16.02.2013
comment
+1 Хорошее замечание; Я должен буду проверить tml. Но, очевидно, то, что я не могу отладить, мне не очень полезно; это большой проект - person Mawg says reinstate Monica; 16.02.2013

Вместо того, чтобы пытаться перешагнуть, что произойдет, если вы установите точку останова на следующей строке после строки, которую вы хотите перешагнуть?

Кроме того, изменится ли операция, если вы отключите оптимизацию компилятора?

person Jeff    schedule 16.02.2013
comment
+1 То же самое происходит, если я делаю точку останова на строке после и бегу к ней. И, так как я все еще разрабатываю, у меня отключена оптимизация. - person Mawg says reinstate Monica; 17.02.2013