Jump to content

    

Harvester

Участник
  • Content Count

    440
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Harvester

  • Rank
    Местный
  • Birthday 12/24/1976

Контакты

  • Сайт
    Array

Информация

  • Город
    Array

Recent Profile Visitors

5097 profile views
  1. Еще забыли 4-е состояние - обрыв шлейфа в результате неисправности.
  2. И все равно непонятно. Пусть у меня переменная uint64_t. Почему же модификатор %u выводит 0, хотя значение, содержащееся в переменной, укладывается в диапазон uint32_t?
  3. А слона-то я и не заметил )))) Замена модификатора на %llu решило проблему. Пункт б) вычеркиваем - сам дурак. Приношу извинения разработчикам компилятора и, на всякий случай, Петрову с Бошировым.
  4. Да Получил ассемблерный листинг. addi 0,31,152 # tmp235,, lis 9,.LC22@ha # tmp236, la 3,.LC22@l(9) #,, tmp236 mr 4,0 #, tmp235 bl statfs64 # mr 0,3 # D.6778, cmpwi 7,0,0 #, tmp237, D.6778 bne 7,.L48 # .LBB9: .loc 2 382 0 lwz 9,160(31) # fs.f_blocks, D.6781 r9 <- fs.f_blocks.hi lwz 10,164(31) # fs.f_blocks, D.6781 r10 <- fs.f_blocks.lo li 3,10 #, r3 <- LOG_DEBUG lis 0,.LC23@ha # tmp238, addic 4,0,.LC23@l #, tmp238, r4 <- адрес строки mr 5,9 #, D.6781 r5 <- r9 (fs.f_blocks.hi) mr 6,10 # tmp5, D.6781 r6 <- r10 (fs.f_blocks.lo) crxor 6,6,6 r6 <- 0 bl msg # msg() .loc 2 385 0 lwz 9,160(31) # fs.f_blocks, D.6782 r9 <- fs.f_blocks.hi lwz 10,164(31) # fs.f_blocks, D.6782 r10 <- fs.f_blocks.lo stw 10,12(31) # blocks, D.6782 12(31) <- r10 (blocks = fs.f_blocks.lo) .loc 2 388 0 li 3,10 #, r3 <- LOG_DEBUG lis 0,.LC23@ha # tmp239, addic 4,0,.LC23@l #, tmp239, r4 <- адрес строки lwz 5,12(31) # blocks, r5 <- 12(31) (blocks) crxor 6,6,6 r6 <- 0 bl msg # msg() .L48: Получается, что а) поля структуры fs 64-битные и б) VA_ARGS некорректно работает с 64-битными значениями Чуда в очередной раз не произошло :D
  5. Еще нет. Не могу понять, как сгенерировать листинг :( void msg(int log_level, const char* mes, ...) { va_list arg; struct timeval tv; struct tm* tm = NULL; if (log_level > logLevelMax) return; gettimeofday(&tv, NULL); tm = localtime(&tv.tv_sec); fprintf(_file4log, "%02u:%02u:%02u.%06lu ", tm->tm_hour, tm->tm_min, tm->tm_sec, tv.tv_usec); va_start(arg, mes); vfprintf(_file4log, mes, arg); va_end(arg); } Что тут может быть кривого? Просто структура. Обновил код.
  6. Столкнулся с такой странностью. В результате выполнения кода struct statfs fs; if (statfs(DREC_STORAGE_DEF, &fs) == 0) { msg(LOG_DEBUG, "f_blocks=%u\n", fs.f_blocks); msg(LOG_DEBUG, "f_bfree=%u\n", fs.f_bfree); msg(LOG_DEBUG, "f_bavail=%u\n", fs.f_bavail); size_t blocks = fs.f_blocks; size_t bfree = fs.f_bfree; size_t bavail = fs.f_bavail; msg(LOG_DEBUG, "f_blocks=%u\n", blocks); msg(LOG_DEBUG, "f_bfree=%u\n", bfree); msg(LOG_DEBUG, "f_bavail=%u\n", bavail); } получаю такой вывод: 09:47:39.949371 f_blocks=0 09:47:39.950237 f_bfree=0 09:47:39.950361 f_bavail=0 09:47:39.950421 f_blocks=103705 09:47:39.950481 f_bfree=99962 09:47:39.950540 f_bavail=99962 Т.е. при выводе непосредственно полей структуры получаем нули. Как такое может быть? Если что, функция msg() - просто обертка над printf/fprintf: void msg(int log_level, const char* mes, ...)
  7. riscv32-unknown-elf-gcc 7.1.1 И да, смена компилятора в планы не входит, по крайней мере, сейчас.
  8. Похоже, Вы меня неправильно поняли. 1-е выражение (предложенное Вами) - я так и делаю в своей программе. 2-е - как я хочу сделать, но не понимаю, почему не работает. Я и не спорю, просто не могу понять. :( Получается, что инициализация static BusFrame *const pxTxBuffers[] = {busBufTx1, busBufTx2}; происходит в рантайме? Я считал, что константы известны уже на этапе компиляции.
  9. Как это нет, если я уже объявил и проинициализировал массив pxTxBuffers? Я так и делаю, просто хочу понять, почему не работает сабж.
  10. Не понял. pxTxBuffers[] - массив константных указателей, значит pxTxBuffers[0] - значение указателя. Именно его мне и нужно присвоить элементу структуры. А Вы предлагаете взять адрес этого указателя.
  11. Похоже, запутался в трех соснах :) Имеются объявления: BusFrame busBufTx1[FRAMES_PER_BUF]; BusFrame busBufTx2[FRAMES_PER_BUF]; static BusFrame *const pxTxBuffers[] = {busBufTx1, busBufTx2}; Создаю вспомогательную структуру static const struct dma_msg xDmaSettings[2] = { { .txbuf = (uint32_t *)busBufTx1, ... }; Но когда я пытаюсь написать .txbuf = (uint32_t *)pxTxBuffers[0] компилятор ругается "initializer element is not constant". Почему так, ведь pxTxBuffers[] - массив константных указателей?
  12. Есть такая микросхема ADM2795E (изолированный приемопередатчик RS485). Выдержка из документации: Стандарты группы МЭК 61000 регламентируют именно устойчивость (immunity) к различным воздействиям. Но здесь какая-то мешанина. В 1-м пункте говорится про защиту (protection) и при этом указываются параметры испытательных воздействия 4-й степени жесткости. Но в стандартах нет ни слова про защиту! Во 2-м пункте говорится про устойчивость (immunity) и при этом не указывается степень жесткости! Как это следует понимать?
  13. https://www.nxp.com/products/no-longer-manufactured/sd-sdio-mmc-ce-ata-host-controller:SDIO101AIHR