как интерпретировать ошибки?

    • #76293
      Николай
      Ключник

      goreprogrammist

      28 апр 2023, 22:47
      во-первых, прикольно было увидеть, что этот раздел еще живее всех живых (хотя в активных темах оно как-то теряется)
      портирую тут одну штуку под mega8a

      Compiling: timer1ovf_isr.c
      /usr/local/bin/avr-gcc -c -mmcu=atmega8a -I. -gstabs -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=Builds/timer1ovf_isr.lst -std=gnu99 -gstabs -gstrict-dwarf /Users/red/Documents/dev/AVR/LIN-mega8/LIN-mega8/timer1ovf_isr.c -o Builds/timer1ovf_isr.o
      In file included from /Users/red/Documents/dev/AVR/LIN-mega8/LIN-mega8/config.h:38,
      from /Users/red/Documents/dev/AVR/LIN-mega8/LIN-mega8/timer1ovf_isr.c:36:
      /usr/local/Cellar/avr-gcc@9/9.3.0_3/avr/include/avr/iom8a.h:42:4: error: #error Include &lt,avr/io.h&gt, instead of this file.
      42 | # error Include &lt,avr/io.h&gt, instead of this file.
      | ^
      /Users/red/Documents/dev/AVR/LIN-mega8/LIN-mega8/timer1ovf_isr.c:54: warning: ignoring #pragma optimize -Wunknown-pragmas
      54 | #pragma optimize=z 2 // Force no optimization for this ISR.
      |
      /Users/red/Documents/dev/AVR/LIN-mega8/LIN-mega8/timer1ovf_isr.c:55: warning: ignoring #pragma vector -Wunknown-pragmas
      55 | #pragma vector= TIMER1_OVF_vect
      |
      /Users/red/Documents/dev/AVR/LIN-mega8/LIN-mega8/timer1ovf_isr.c:56:12: error: expected ‘,’ before ‘void’
      56 | __interrupt void TIMER1_Overflow_ISR (void){
      | ^
      | ,
      make: *** Builds/timer1ovf_isr.o Error 1

      видимо, код из какой-то другой среды. собираю через avr-gcc, ну и вот такая ругань.
      для начала не ясно, где, вместо какого файла и почему нужно инклюдить avr/io.h
      почему игнорируются эти строки про оптимизацию и почему ему нужна точка с запятой перед войдом (тоже игнорирует __interrupt?)

      goreprogrammist

      28 апр 2023, 23:11
      допустим, от той ругани я избавился (не уверен, что правильно) – поменял с инклюда iom8a.h на io.h
      прагмы поудалял, __interrupt тоже
      теперь интереснее:
      /usr/local/opt/avr-binutils/bin/avr-ld: Builds/timer1ovf_isr.o: in function `TIMER1_Overflow_ISR’:
      /Users/red/Documents/dev/AVR/LIN-mega8/LIN-mega8/timer1ovf_isr.c:62: undefined reference to `l_sch_tick’
      при этом у меня есть в этом файле инклюд на другой файл, где есть прототип этой функции (ну и реализация в соответствующем .c файле)
      кстати, файлы .dep, .ewd и .ewp – это что за среда вообще?

      COKPOWEHEU

      28 апр 2023, 23:14
      для начала не ясно, где, вместо какого файла и почему нужно инклюдить avr/io.h

      Он же написал, что ошибка в файле /usr/local/Cellar/avr-gcc@9/9.3.0_3/avr/include/avr/iom8a.h
      Вот вместо него и нужен io.h

      /Users/red/Documents/dev/AVR/LIN-mega8/LIN-mega8/timer1ovf_isr.c:54: warning: ignoring #pragma optimize

      Оптимизации задаются ключом -O (например, -O0, -O1, -Os, -Ofast) в мейкфайле

      /Users/red/Documents/dev/AVR/LIN-mega8/LIN-mega8/timer1ovf_isr.c:55: warning: ignoring #pragma vector

      Не знаю где используется вариант с прагмами, просто пишите ISR(TIMER1_OVF_vect){…} вместо __interrupt void TIMER1_Overflow_ISR (void){
      Еще не забудьте, что в том же мейкфайле задается частота камня -FD_CPU=1000000UL (НЕ В ИСХОДНИКАХ!) или что-то в этом роде и тип контроллера –mcu=atmega8

      goreprogrammist

      29 апр 2023, 01:05
      про ISR – спасибо, напомнили)
      про оптимизацию – в мейкфайле она для всего проекта, а тут – для отдельного обработчика.
      пытаюсь понять, как его заставить собирать все .c файлы (вроде бы в makefile указал директории
      EXTRAINCDIRS = lin_uart TIMER UART
      но в выводе один фиг для других файлов, которые не в корне проекта, ничего не собирается, ну и ругань идет от линковщика, как я понимаю

      goreprogrammist

      29 апр 2023, 01:15
      тэк, добавил в мейкфайл в строку SRC через пробел директорию и вроде пошло дело.
      теперь другая напасть: в заинклюженном файле строки

      * @fn _lin_it_uart_rx
      * @brief This interrupt function manages the State machine of the LIN.
      * The receive interrrupt is used to be able to check at each byte
      * if the byte monitored (received) is the same than byte sent.
      **/
      __interrupt void _lin_it_uart_rx (void) {
      switch (_lin_state) {
      /** STATE_CHECK_BREAK: This state is used for both SLAVE and MASTER
      * configuration.

      но разве такой вектор существует? какое-то пользовательское прерывание? первый раз такое вижу. хз как тут быть.

      TrD

      29 апр 2023, 07:48
      Эти файлы от IAR.

      goreprogrammist

      29 апр 2023, 19:29
      хз как тут быть с makefile.
      он не хочет собирать файлы, которые находятся в подпапках.
      я добавил их явным образом
      SRC = $(wildcard *.c) lin_uart/lin_drv_usart.c lin_uart/runtime_calibration_lib.c lin_uart/lin_lib.c lin_uart/slave_lin.c
      но не особо помогло. теперь оно ругается вот так:
      &lt,built-in&gt,: fatal error: opening dependency file Builds/.dep/lin_uart/slave_lin.d: No such file or directory

Viewing 0 reply threads
  • Вы должны войти в систему, чтобы ответить в этой теме.
Интepecнoe нa фopумe:
Авторизация
*
*
Регистрация
*
*
*
Генерация пароля
×