BGM240 стартануть...

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: BGM240 стартануть...

Сообщение uldemir »

Вы будете смеяться. Хотел выложить, но файл получился 2Мб, а "Максимальный разрешенный размер: 1 MiB." Тогда проимпортировал в чистый воркспейс, скомпилировал, убедился, что проблема никуда не делась и начал удалять все c-файлы. Сделал файл-затычку для переменных которые использует app.c. Скомпилировал, загрузил... и бондинг отработал номально. Интересно, какое железо или ресурс мешает нормальной работе?
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: BGM240 стартануть...

Сообщение Ser60 »

Мне не видно отсюда какой ресурс мешает. Теперь возвращайте с-файлы по одному обратно пока не увидите проблему.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: BGM240 стартануть...

Сообщение uldemir »

Увы, да. Шкафчик с реактивами находится у меня. Просто может, кто знает, что надо выбрать склянку с ртутью или высвободить какой-то канал PRS, как это было в кристаллах первой серии. Будет чем теперь заняться.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: BGM240 стартануть...

Сообщение uldemir »

Готов получить в свой адрес гнилые помидоры. Всё оказалось просто. Даже не просто, а очень просто.

Начал убирать файлы. Разумеется, по списку сверху. Файлы на "A", потом на "B", "C" итд. К счастью, весь алфавит перепахивать не пришлось, проблема отыскалась на букве "D" - display.c. Правда, сам файл я не убирал, а в ресурсах просто убрал дефайн #define HAVE_A_DISPLAY. и пришлось убрать вызов функции Configure(), которая на дисплее поддерживает конфигурационную менюшку. Ну вот и два подозреваемых: вывод на дисплей и конфигуратор. Оба они мне не нравятся. Написаны давно, потом к ним было еще кой-что приписано. Примерно как построил маленький домик, потом к нему второй этаж, потом на втором этаже балкон. потом мезонин, а потом гараж и веранду с возможностью установки лифта. В общем, так и хочется стереть и написать по-новой и покрасивей.

Но оказалось что там проблем нет. а проблема оказалась в этом месте:

Код: Выделить всё

    case sl_bt_evt_sm_passkey_display_id:
      {
        uint32_t passkey = evt->data.evt_sm_passkey_display.passkey;
        UART0_OutString("Show passkey: ");
        UART0_OutUDec(passkey);
        UART0_OutString("\r\n");
      }
      break;
угу, только там было на самом деле так:

Код: Выделить всё

    case sl_bt_evt_sm_passkey_display_id:
      {
        uint32_t passkey = evt->data.evt_sm_passkey_display.passkey;
 #ifdef HAVE_A_DISPLAY
        char clpbrd[7];
        *int2str(passkey, clpbrd, 0) = '\0';
        putstr(0, 0, "Passkey ", 1);
        putstr(0, 8, "clpbrd", 1);
#endif
       UART0_OutString("Show passkey: ");
        UART0_OutUDec(passkey);
        UART0_OutString("\r\n");
      }
      break;
Т.е. пинкод разом отображался на oled дисплее и выводился в терминал. Так как дисплей у меня еще не подключен, не видел что там отображается. И когда я этот фрагмент закомментировал - всё заработало. Значит одна из этих функций "течёт". Которая int2str или putstr. откомментировал первую - проблемы нет, откомментировал вторую - проблемы нет. откомментировал третью: putstr(0, 8, "clpbrd", 1); - есть отказ. Думаю надо бы пройтись отладчиком. Ставлю брекпоинт, запускаю, захожу в функцию... Йолки-Палки. Функция описана:

Код: Выделить всё

void putstr(int x, int y, char * string, unsigned int invert)
Предполагалось, что пин-код будет выводиться с 8 знака в строке (это координата икс), а я засунул эту восьмёрку в координату игрек, т.е. номер строки. А строк всего 8. Т.е. с этим параметром вылетел за пределы экранного буфера куда-то в чужую память. Ну да, надо бы сделать валидацию или маску для аргументов функции...

вот так всё просто оказалось, а искал две с лишним недели.
Ответить

Вернуться в «ARM»