Бегающие светодиодики в разные стороны — это круто. Но когда весь код состоит только из ассемблера — это не очень. Поддерживать его становится сложно, да и все дела.
Для примера можно один из модулей предыдущего проекта написать не на ассемблере, а на Си и всё при этом будет работать. (см. ниже button.c).
Только не забывайте, что стандартная библиотека в этом проекте не инициализирована (мы перехватили её функцию инициализации), а значит, память не очищена, глобальные переменные не инициализированы и функции, работающие с кучей, будут работать некорректно.
читать дальшеДля интереса можно заменить файл button.s на button.c, выложенный ниже, логика работы от этого не поменяется.
Но всё же без корректной стандартной библиотеки жить не здорово. Потому двумя простыми действиями вернём её на место =)
Для этого в файле main.s заменим __main на main. Таким образом, библиотека стартует и передаст управление нашей программе.
Главное, не забыть выставить «Use MicroLIB», иначе не заработает. Словите Hard Fault на неизвестной инструкции (FPU ж не включали сами).
Итак, отсюда уже постепенно можно переходить на язык Си, заменяя отдельные функции и процедуры. Впрочем, можно и наоборот.
UPD: маленькое замечание относительно библиотеки MicroLib. При компиляции какого-либо проекта могут вылезти такого рода ошибки:
Warning: L6665W: Neither Lib$Request$armlib Lib$Request$cpplib defined, not searching ARM libraries.
Error: L6411E: No compatible library exists with a definition of startup symbol __main.
Это случается, когда проект состоит только из ассемблерных файлов, и линкёр удивляется, какого фига вы пытаетесь подключить библиотеку MicroLib. Решить это можно разными путями:
1. Самый простой и незамысловатый: создать пустой файл с расширением .c: "lib.c", например, и подключить его к проекту. Библиотека прицепится без вопросов.
2. Заменить точку входа с main на __main (представиться библиотекой), и почистить startum_stm32f4xx.c от библиотекозависимого кода. Ну или объявить недостающие символы. Правда, память при этом чиститься не будет.
3. Использовать другие библиотеки (в частности, самопал). Но это уже очень странный способ.
button.c
Проект с файлом button.c и включённой библиотекой.<< Предыдущее Следующее >>