вообщем, хочу реализовать быстрый контроль памяти стека для RTOS.
сейчас сделано тупо - перед переключением контекста проверяется самый первый int области стека ( соответственно последний если исходить что в cm3 голова в хвосте )
в функции printf стек используется нелинейно и у меня практически получилось, что проскочило мое контрольное слово и потер уже за стеком.
напрашивается контроль к примеру 16 слов. Проверять ручками это не камильфо - долго, интересуют именно быстрые варианты
какие есть быстрые ?
Я пока надумал:
1. экслюзивный доступ
2. мои предположения что авось есть спец регистр, который можно настроить за наблюдение за другим регистром и запоминает его минимальное значение. В данном случае натравить на PSP
3. Какие еще варианты ?
вот пример как у меня произошел выход за пределы
upd: "экслюзивный доступ" увы но медленный. Я думал что можно указать регион мониторинга. Но нет, там для каждого WORD выставляется общий признак. То есть перед передачей управления задаче, нужно сначала пометить первых N-слов, и потом перед возвратом проверить экслюзивный доступ (да еще вопрос как поведет себя обычная запись по этим регистрам). Конечно есть небольшой плюс - можно отказатся от magic word.
upd2:
еще порылся в отладчике, и поразило, какой жадный этот printf в режиме Large Without Multibytes, сразу 132 байта под себя требует !
Код
PrintfLargeNoMb:
0xb92c: 0xe92d 0x4ff0 PUSH.W {R4-R11, LR}
0xb930: 0xb0a1 SUB SP, SP, #0x84
Еще для справки: tiny = 0x10, small without multibytes = 0x4C, full Without Multibytes = 0x84
Марс - единственная планета, полностью населенная роботами (около 7 штук).