Метценгерштейн
Apr 13 2015, 11:49
http://c2n.me/3g0Fl2Oтам где стрелочка, не хочет ставится бряка. Хотя эта ф-я возвращает в реальности корректное значение.
aaarrr
Apr 13 2015, 11:53
Из-за высокого уровня оптимизации, например.
Метценгерштейн
Apr 13 2015, 11:56
нулевой стоял уровень оптимизации.
Синтаксис корректный же?
aaarrr
Apr 13 2015, 11:58
На вид все корректно.
Метценгерштейн
Apr 13 2015, 11:59
может такие глюки отладчика кейла?
A. Fig Lee
Apr 13 2015, 12:01
Да много ииза чего. Например количесво брекпойнтов закончилось, надо гдето удалить брекпойнт, чтоб можно было еще добавить.
Не понятно ни что за компайлер, ни что за микроконтроллер.
Потому и не работает, что даже вопрос не задан в полной мере.
Метценгерштейн
Apr 13 2015, 12:02
брэкпоинт один.
компилятор- keil
МК- Nordic
только такие глюки никак не связаны с типом МК.
Harvester
Apr 13 2015, 12:12
Посмотрите на дизассемблер. Как вариант: нет прямого соответствия исходного и машинного кода, поскольку компилятор в этом месте просто прыгает на финальный возврат
aaarrr
Apr 13 2015, 12:13
Цитата(Метценгерштейн @ Apr 13 2015, 15:02)

только такие глюки никак не связаны с типом МК.
Это не глюк, а особенность работы оптимизатора. Скорее всего, "return i" в результате оптимизации совмещен с "return -1", т.е. физически отсутствует в коде как отдельный оператор. Странно только, что это наблюдается на нулевом уровне.
Если хотите получить возможность поставить точку останова на этом месте, добавьте какой-нибудь не подлежащий оптимизации оператор перед return:
Код
__nop();
return [i];
Метценгерштейн
Apr 13 2015, 12:27

нет, не помогло.
Самое интересное, что корректно возвращает i- я его получаю дальше по коду
aaarrr
Apr 13 2015, 12:28
Цитата(Метценгерштейн @ Apr 13 2015, 15:27)

нет, не помогло.
На __nop() не устанавливается?
Метценгерштейн
Apr 13 2015, 12:31
на noop ставится. Я думал, что на return надо.
А что нам noop дает?
aaarrr
Apr 13 2015, 12:40
Цитата(Метценгерштейн @ Apr 13 2015, 15:31)

А что нам noop дает?
Возможность установить breakpoint, что же еще?
Метценгерштейн
Apr 13 2015, 12:47
да, точно. Установка перед return. Только что проверил- пошаговая отладка встает на
__nop();
затем перепрыгивает return и тд.
но значение дальше по коду принимается.
Наверное, i сразу загружается в R0, и при выходе никакой дополнительной команды не требуется.
toweroff
Apr 14 2015, 04:55
Скорее всего, в i изначально заносится -1, а по ходу цикла модифицируется значением переменной
В результате выход из функции только один. Вы же не приводите ассемблерный листинг
Метценгерштейн
Apr 14 2015, 06:24
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.