На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела "Программирование под PalmOS"
Правила раздела просты:
1. Будьте вежливыми.
2. Задавате вопросы только по теме. Пользовательские вопросы (у меня не работает пальм) являются оффтопиком. Пользуйтесь конференциями palmz.in, hpc.ru, ihand.ru .
3. Поиск вареза запрещен.
4. Пользуйтесь поиском. Не надейтесь, что кому-то доставляет удовольствие отвечать в сотый раз на один и тот же вопрос.
Страницы: (4) « Первая ... 2 3 [4]  все  ( Перейти к последнему сообщению )  
> Известные баги PalmOS 5.4, tt5 как источник халявного секса
    MemChunkNew был в правильной куче?
      Вот код. Память просто не выделяется, если запросить (1<<31). Если просить меньше максимально возможного - выделяется.
      ExpandedWrap disabled
        UInt32 free;UInt32 max;
        MemHeapFreeBytes((1|0x8000),&free,&max);
        DrawLong("DbCache free",(free/1024L),0);
        DrawLong("DbCache max",(max/1024L),10);
           UInt32 size=(1L<<31);
           MemPtr chunk=MemChunkNew((1|0x8000),size,0x1203);
        MemHeapFreeBytes((1|0x8000),&free,&max);
        DrawLong("DbCache free",(free/1024L),20);
        DrawLong("DbCache max",(max/1024L),30,400);
        if(chunk!=NULL)MemChunkFree(chunk);

      Возможно неверно заданы флаги для MemChunkNew (0x1203)
        Новый прикол NVFS на TX.
        Например нам надо прочитать все базы на девайсе.
        Вот упрощенный код, работающий на всем кроме TX:

        ExpandedWrap disabled
           UInt16 count=0;
           LocalID db_id;
           do{
               db_id=DmGetDatabase(0,(UInt16)count);
               if(db_id!=NULL)
                  ExgDBWrite(Callback,NULL,NULL,db_id,0);
               count++;  
              }while(db_id!=NULL);

        Callback ничего не делает, просто возвращая errNone.
        На TX вскоре после заполнения DbCache произойдет Fatal Alert.
        Но стоит нам добавить вызов DmDatabaseInfo, как все замечательно работает и на TX.
        Вот так:

        ExpandedWrap disabled
           UInt16 count=0;
           LocalID db_id;
           do{
               db_id=DmGetDatabase(0,(UInt16)count);
               if(db_id!=NULL)
                  {
                   DmDatabaseInfo(0,db_id,NULL,&attr,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
                   ExgDBWrite(Callback,NULL,NULL,db_id,0);
                  }
               count++;  
              }while(db_id!=NULL);
        Сообщение отредактировано: boriswm -
          а симулятор в репортер чего-нибудь пишет?
            А на симуляторе разумеется все работает.
            Кстати, кто знает как на TX посмотреть последний Fatal Alert? А то, похоже, так как на Treo - алерт не показывается в сразу soft-reset.
              работать-то оно может и работает на симуляторе, но вполне способно писать варнинги в репортер.

              утилита debug prefs из пальмвановских тулзов на TX не работает?
                DebugPrefs работает, спасибо за наводку. Судя по всему ошибка генерируется системой (источник fatal alert - unknown application).
                А Reporter не показывает никаких интересных сообщений - все в норме на симуляторе.
                  unknown application - это когда SysCurAppDatabase возвращает err != errNone. Например, такое бывает при обработке нотификации hapl в procedure callback.
                    Откопал ещё одну фишку. Если в ARM коде создать битмапку (BmpCreate) с помощью родной функции (через R9, без PACE) и вернуть указатель на неё в 68K код, то в 68K коде эта битмапка с помощью BmpDelete не убивается, возвращается ошибка sysErrParamErr, хотя функции BmpGetBits и WinDrawBitmap работают. Я, конечно, понимаю, что поля структуры BitmapType скорее всего в LE, но какого х.... работает, скажем WinDrawBitmap. А может я в чём-то туплю... :)
                      я так понимаю, что BitmapType в 68k - это теневая структура. А ты создал только оригинальную структуру. Не исключено, что некоторые 68к функции ( особенно read only) жуют оригинальные структуры, но для изменения требуют наличия двух структур.
                        Цитата igor_n @
                        но для изменения требуют наличия двух структур


                        Всё равно не понимаю, зачем нужна теневая структура, чтобы убить битмапку, я же не меняю поля, я просто хочу освободить память :)
                          PACE ожидает указатель на 68К версию, а ты ему отдаешь ARM версию. Не работает, увы. Нужно убивать там где создавал, т.е. из ARM. Знакомые грабельки :)
                            :lol:
                              :-?
                                ;)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1120 ]   [ 15 queries used ]   [ Generated: 18.10.17, 16:51 GMT ]