targets/plc_main_tail.c
changeset 991 afc4963d8f0c
parent 985 cd8dadcef426
child 995 5dcb361a55ef
equal deleted inserted replaced
990:7f57b969caed 991:afc4963d8f0c
    26     if(buffpos + size < LOG_BUFFER_SIZE){
    26     if(buffpos + size < LOG_BUFFER_SIZE){
    27         memcpy(&LogBuff[level][buffpos], buf, size);
    27         memcpy(&LogBuff[level][buffpos], buf, size);
    28     }else{
    28     }else{
    29         uint32_t remaining = LOG_BUFFER_SIZE - buffpos - 1; 
    29         uint32_t remaining = LOG_BUFFER_SIZE - buffpos - 1; 
    30         memcpy(&LogBuff[level][buffpos], buf, remaining);
    30         memcpy(&LogBuff[level][buffpos], buf, remaining);
    31         memcpy(LogBuff[level], buf + remaining, size - remaining);
    31         memcpy(LogBuff[level], (char*)buf + remaining, size - remaining);
    32     }
    32     }
    33 }
    33 }
    34 void inline copy_from_log(uint8_t level, uint32_t buffpos, void* buf, uint32_t size){
    34 void inline copy_from_log(uint8_t level, uint32_t buffpos, void* buf, uint32_t size){
    35     if(buffpos + size < LOG_BUFFER_SIZE){
    35     if(buffpos + size < LOG_BUFFER_SIZE){
    36         memcpy(buf, &LogBuff[level][buffpos], size);
    36         memcpy(buf, &LogBuff[level][buffpos], size);
    37     }else{
    37     }else{
    38         uint32_t remaining = LOG_BUFFER_SIZE - buffpos; 
    38         uint32_t remaining = LOG_BUFFER_SIZE - buffpos; 
    39         memcpy(buf, &LogBuff[level][buffpos], remaining);
    39         memcpy(buf, &LogBuff[level][buffpos], remaining);
    40         memcpy(buf + remaining, LogBuff[level], size - remaining);
    40         memcpy((char*)buf + remaining, LogBuff[level], size - remaining);
    41     }
    41     }
    42 }
    42 }
    43 
    43 
    44 /* Log buffer structure
    44 /* Log buffer structure
    45 
    45 
    82             new_cursor = ((uint64_t)(tail.msgidx + 1)<<32) 
    82             new_cursor = ((uint64_t)(tail.msgidx + 1)<<32) 
    83                          | (uint64_t)((buffpos + size + sizeof(mTail)) & LOG_BUFFER_MASK);
    83                          | (uint64_t)((buffpos + size + sizeof(mTail)) & LOG_BUFFER_MASK);
    84         }while(AtomicCompareExchange64(
    84         }while(AtomicCompareExchange64(
    85             (long long*)&LogCursor[level],
    85             (long long*)&LogCursor[level],
    86             (long long)old_cursor,
    86             (long long)old_cursor,
    87             (long long)new_cursor)!=old_cursor);
    87             (long long)new_cursor)!=(long long)old_cursor);
    88 
    88 
    89         copy_to_log(level, buffpos, buf, size);
    89         copy_to_log(level, buffpos, buf, size);
    90         copy_to_log(level, (buffpos + size) & LOG_BUFFER_MASK, &tail, sizeof(mTail));
    90         copy_to_log(level, (buffpos + size) & LOG_BUFFER_MASK, &tail, sizeof(mTail));
    91 
    91 
    92         return 1; /* Success */
    92         return 1; /* Success */