Показано с 1 по 10 из 10

Тема: Некорректная работа таблицы отображения данных (хранилища)

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,204

    По умолчанию

    Цитата Сообщение от zaurm Посмотреть сообщение
    petera, отдельно выражаю Вам благодарность за набор средств под названием DeBug.
    Без этого инструмента браться за любой более-менее сложный проект не имеет смысла.
    С самого начала активно использую, сэкономлено уйма сил и времени.
    .....
    под названием DeBug скрывается этот пост https://owen.ru/forum/showthread.php...l=1#post251022
    Использование макроса "DEBUG Print" можно упростить если сохранить текст функции
    DebugPRN:
    Код:
    #include <stdarg.h>
    //#define DEBUG_ENB 1
    void realdprintf (char const *file, int line, char const *func, int delay, char const *format, ...);
    
    #if DEBUG_ENB
    #define DEBUG(...) realdprintf(__FILE__, __LINE__, __func__, __VA_ARGS__)
    
    void realdprintf (char const *file, int line, char const *func, int delay, char const *format, ...)
    {
    #define winNo       5002
    #define LTOTAL      8
    #define CTOTAL      40
    #define INPUT       PSW[136]
    #define SCRADDR     PSW[139]
    #define TIC         (*(DWORD*) (PSW + 38))
    #define TABS        8
    #define OK          0       
    #define LEFT        1       
    #define RIGHT       2       
    #define KbdStatus(bitno)   ((INPUT) & (1 << (bitno)))
    #define FORWARD     1  
    #define BACKWARD   -1
    
    char *pBuffScr;
    char *pBuffPrint = Malloc((LTOTAL -1) * CTOTAL);
    BYTE *saveREGS = Malloc(LTOTAL * CTOTAL);
    WORD saveREG1, saveREG2;
    static int Xpos = 0, Ypos = 0;
    register int t, len2;
    int len1, len3, dir;
    unsigned long tm;
    va_list arg;
    
    /* Save working registers */
    saveREG1 = INPUT;
    saveREG2 = SCRADDR;
    /* Calculate the initial address of the screen buffer */
    SCRADDR = PSW[10] - LTOTAL * CTOTAL/2;
    pBuffScr = (char*) &PSW[SCRADDR];
    /* Save the registers of the screen buffer area  */
    memcpy(saveREGS, pBuffScr, LTOTAL * CTOTAL);
    /* Clear screen buffer  */
    memset(pBuffScr, ' ', LTOTAL * CTOTAL);
    
    /* Print to screen line #1 */
    len1 = sprintf(pBuffScr, "> %s line %d in %s ", func, line, file);
    len2 = CTOTAL + Max(0, len1-CTOTAL);
    
    /* remaining print lines in the buffer */
    va_start(arg, format);
    len3 = vsnprintf (pBuffPrint, LTOTAL * CTOTAL - len2 - 1, format, arg);
    va_end(arg);
    pBuffPrint[len3] = '\0';
    
    /* Display buffer on screen */
    t= 0;
    do {
        switch(pBuffPrint[t]) {
            case '\a':		//Bell
                Beep();
                break;
            case '\t':		//Tab    
                len2 = len2 - len2 % TABS + TABS;
                break;
            case '\n':		//LF    
                len2 = len2 - len2 % CTOTAL + CTOTAL;
                break;            
            default:
                pBuffScr[len2] = pBuffPrint[t];
                len2++;
        }
        t++;
    } while (pBuffPrint[t] !=0 && len2 < (LTOTAL * CTOTAL));
    
    /* Call the debug window and control its position */
    dir = FORWARD;
    tm = TIC;
    while(!(KbdStatus(OK) || (delay !=0 && (TIC-tm) >= delay*10)) ) {
        if (KbdStatus(RIGHT)) {
            tm = TIC;
            CloseWindow(winNo);
            Xpos = Xpos + 100;     
        }
        if (KbdStatus(LEFT)) {
            tm = TIC;
            CloseWindow(winNo);
            Xpos = Xpos - 100;
            if (Xpos < 0) {
                Xpos = 0;
                Ypos = Ypos + dir * 100;
            }
            if (Ypos == 400) dir = BACKWARD;
            if (Ypos == 0) dir = FORWARD;
        }
        OpenWindow(winNo, Xpos, Ypos);
        INPUT = 0;
        Delay(10);
    }
    CloseWindow(winNo);
    
    /* Restore working registers */
    memcpy(pBuffScr, saveREGS, LTOTAL * CTOTAL);
    INPUT = saveREG1;
    SCRADDR = saveREG2;
    /* Deallocate memory blocks */
    Free(pBuffPrint);
    Free(saveREGS);
    }
    
    #else
    #define DEBUG(...)
    #endif

    в файл ".\ARMTool\Include\Debug_prn.h"
    Захват-22.png
    Тогда достаточно в глобальный макрос проектов добавить всего две строчки
    Код:
    #define DEBUG_ENB 1
    #include <Debug_prn.h>
    Захват-11.png
    Последний раз редактировалось petera; 05.05.2026 в 11:39.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Похожие темы

  1. Ответов: 9
    Последнее сообщение: 02.09.2024, 15:11
  2. как взять данные с таблицы отображения данных?
    от delta8 в разделе Панели оператора (HMI)
    Ответов: 0
    Последнее сообщение: 15.01.2024, 11:33
  3. Некорректная работа ПДУ-RS
    от alekstani в разделе Вопросы по эксплуатации датчиков
    Ответов: 8
    Последнее сообщение: 29.03.2023, 15:41
  4. ПДИ-180 некорректная работа
    от Дмитрий Валерьевич в разделе Вопросы по эксплуатации датчиков
    Ответов: 0
    Последнее сообщение: 05.05.2022, 08:11
  5. ТРМ251 некорректная работа ДТС
    от Dim0n в разделе Эксплуатация
    Ответов: 7
    Последнее сообщение: 20.03.2013, 21:28

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •