I'm free

[nRF] 4. nrf_delay(LED동작) BLE400/core51822 본문

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용....

nrf_delay.h
0.00MB

 

ps. 거참. LED 하나 키는데 뭔....

 

 

 

 

Comments