Firmware/nRF
[nRF] 4. nrf_delay(LED동작) BLE400/core51822
freerevival
2022. 10. 14. 18:11
하....
이게 글 쓸 정도의 내용인지는 모르겠지만.
하다가 빡쳐서 쓰게 됨.
환경//
운영체제 : Windows 10 pro x64
프로그램 : uVision5(MDK-ARM 5.37)
제어장치 : BLE400/core51822(nRF51822AC)
사건의 발단.
제공해주는 딜레이를 한번 써보겠다고 체크를 하고,.
소스에서 오른쪽 클릭 후 선언 가능한 리스트를 클릭하면 자동 선언됨 // 좋은 세상이다,..
그리고 간단히 LED 점멸 딜레이를 위해 소스를 작성하고 컴파일하면
짜잔// 에러가 떠줍니다.
다른 곳도 아닌 딜레이에서 ㅡㅡ....
어셈블리에서 지원을 안 한답니다..
열심 검색 두두두두.. 컴파일러를 바꾸면 해결이 된다는 의견 다수.
절반 정도는 응답 없음.
해당 부분을(. syntax divided\n) 주석으로 막으니 잘 됨.
요놈이 문제네? 요놈을 (.syntax unified\n) 이걸로 바꿔서 쓴다는 답변을 봄.
아. 귀찮으니 나도 이렇게 쓰고 말아야겠다.
딜레이가 중요한 것도 아니고. 뭐...
static void __INLINE nrf_delay_us(uint32_t volatile number_of_us) __attribute__((always_inline));
static void __INLINE nrf_delay_us(uint32_t volatile number_of_us)
{
register uint32_t delay __ASM ("r0") = number_of_us;
__ASM volatile (
".syntax unified\n"
"1:\n"
" SUBS %0, %0, #1\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" BNE 1b\n"
".syntax unified\n"
: "+r" (delay));
}
#endif
nrf51만 쓸 거니까.... nrf52쪽도 지우고 요것만 남겨놓고 컴파일//
에러 없음//
동작 잘됨//
수정한 딜레이 파일. nrf51용....
ps. 거참. LED 하나 키는데 뭔....