Я не эксперт, но, похоже, ссылка на ARM DS-5, который является отдельным компилятором, то есть не таким, как MDK Кейла. Таким образом, документация не применяется.
Реализация этих функций не супер сложна; если все остальное терпит неудачу, я смотрю на вывод компилятора из GCC и просто повторно реализую его.
В качестве альтернативы прочитайте инструкции LDREX
/ STREX
и инструкции по защите памяти и получайте удовольствие! :)
ОБНОВЛЕНИЕ : Я думаю, что __sync_fetch_and_add_4()
является новым, но Keil поддерживает только более старый набор встроенных программ GCC. Обратите внимание, что __sync_fetch_and_add_4
не отображается в списке функций, которые они поддерживают. На этой странице руководства GCC написано:
До GCC 4.7 использовались более старые __sync
встроенные функции. Примером неопределенного символа от использования __sync_fetch_and_add
на неподдерживаемом хосте является отсутствующая ссылка на __sync_fetch_and_add_4
.
Так, похоже, Кейл отслеживает довольно старую версию GCC? С другой стороны, я вижу __sync_fetch_and_add()
в списке, и я предполагаю, что «магическим образом» генерирует вызов __sync_fetch_and_add_4()
, если он используется на 32-битном количестве. Weird.