Перейти к содержанию
    

Почему-то перестало компилироваться

Выдаёт такую ошибку:

../scmRTOS/Cortex-M0/OS_Target.h:62:2: error: #error "This file must be compiled for ARMv6-M (Cortex-M0) processor only."

Что может быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто-то потерял в makefile строчку

MCU = cortex-m0

?

Только кто этот кто-то?

Из makefile:

# program version

VER_MAJOR = 0

VER_MINOR = 1

 

TOOL = arm-none-eabi-

# TOOL = arm-kgp-eabi-

 

# compile options

MCU = cortex-m0

OPTIMIZE = -O3

USE_LTO = NO

 

Даже не теряюсь в догадках. Вооще не понимаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. А оно вообще компилировалось?

2. Может подхватился другой makefile?

3. Проверьте дальше в makefile наличие строчек

    FLAGS   = -mcpu=$(MCU) -mthumb
...
    AFLAGS  = $(FLAGS)
...    
    CFLAGS  = $(FLAGS)
    CFLAGS  += $(OPTIMIZE)
...    
    CXXFLAGS    = $(FLAGS)
    CXXFLAGS    += $(OPTIMIZE)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. А оно вообще компилировалось?

Компилировалось и работало.

 

2. Может подхватился другой makefile?

Хз. Как проверить?

 

3. Проверьте дальше в makefile наличие строчек

Есть строчки (makefile - ваш).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как проверить?

Ну например заменить все вхождения слова "compiling" на слово "compiliren", и посмотреть в консоли, появится ли новое слово :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну например заменить все вхождения слова "compiling" на слово "compiliren", и посмотреть в консоли, появится ли новое слово :)

 

Так и сделал:

--- compiliren ./src/main.cpp...

In file included from ../scmRTOS/Common/scmRTOS.h:54:0,

from ./src/main.cpp:48:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так и сделал:
Теперь осталось закомментировать строчку .SILENT (если такая есть, если нет - убрать @ в начале команды компиляции), пронаблюдать в консоли полную строку запуска компилятора, если дальше сами не разберетесь - копируйте сюда.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь осталось закомментировать строчку .SILENT (если такая есть, если нет - убрать @ в начале команды компиляции), пронаблюдать в консоли полную строку запуска компилятора, если дальше сами не разберетесь - копируйте сюда.

 

Спасибо, помогло.

Оказалось компилятор сменился - инсталлировал несколько дней назад одну Ide (тоже на базе eclipse), путь к тулчайну сменился, то есть компилировалось не тем, чем я хотел. Снёс - заработало.

 

Ещё вопрос по порту для M0.

В файле sysinit.cpp есть строка

// 3 FLASH waitstates
        *(uint32_t *)0x4003C010 = 3;

Зто запись в регистр FLASHCFG? Кстати не нашёл упоминания о нём ни в одном h-файле, может его и трогать не надо?

По даташиту для 3 waitstates

post-17322-1330557887_thumb.jpg

должно быть так:

// 3 FLASH waitstates
        *(uint32_t *)0x4003C010 |= 2;

Или нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В файле sysinit.cpp есть строка

// 3 FLASH waitstates
        *(uint32_t *)0x4003C010 = 3;

Зто запись в регистр FLASHCFG? Кстати не нашёл упоминания о нём ни в одном h-файле, может его и трогать не надо?

Можно и не трогать. "Если вас не интересует результат" ;) Не зря ведь в даташите для этого регистра для конкретных частот указаны конкретные значения.

По даташиту для 3 waitstates

должно быть так:

// 3 FLASH waitstates
        *(uint32_t *)0x4003C010 |= 2;

Или нет?

Да, ошибся. Спасибо, что нашли - сейчас сразу и в боевом проекте исправлю. Еще правильнее будет написать
*(uint32_t volatile *)0x4003C010 = (*(uint32_t volatile *)0x4003C010 & ~3) | 2;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно и не трогать. "Если вас не интересует результат" ;) Не зря ведь в даташите для этого регистра для конкретных частот указаны конкретные значения.

После сброса FLASHCFG находится во вполне определённом состоянии и если значение устраивает можно не писать в него.

 

Еще правильнее будет написать
*(uint32_t volatile *)0x4003C010 = (*(uint32_t volatile *)0x4003C010 & ~3) | 2;

Да, правильней: |=2 - это всё равно что старую ошибку исправить и внёсти новую в тоже место.

Спасибо.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...