wfi
lyszt.net은 wfi 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
설명
wfi는 인터럽트가 도착할 때까지 프로그램을 정지시킵니다. 이 글자는 wait for interrupt의 약자입니다. 할 일이 없는 프로그램은 루프를 돌며 명령어를 계속 실행하기보다 여기에서 유휴 상태로 대기합니다. 피연산자를 받지 않습니다.
wfi
프로세서는 wfi에서 멈추고, 인터럽트가 대기 중이고 mie의 해당 활성화 비트가 설정되어 있으면 다시 시작합니다. 이 시뮬레이터에서는 버튼이 눌리고 그 버튼의 인터럽트가 활성화되어 있을 때 이 일이 발생합니다. 시뮬레이터는 인터럽트 대기 상태를 표시하고 그동안 아무 명령어도 실행하지 않습니다.
다음에 무슨 일이 일어나는지는 mstatus에 달려 있습니다. 전역 인터럽트 활성화 비트가 설정되어 있으면 프로세서는 깨어나자마자 인터럽트를 받아들입니다. 트랩은 wfi 다음 명령어의 주소를 mepc에 기록하고, 핸들러가 실행되며, mret이 wfi 다음 명령어로 돌아갑니다. 전역 활성화 비트가 지워져 있으면 프로세서는 깨어나 핸들러를 실행하지 않고 wfi 다음 명령어로 진행합니다.
버튼 누름 사이에 유휴 상태로 있는 프로그램은 mtvec, mie, mstatus를 설정한 다음 루프에서 wfi를 반복합니다.
loop: wfi j loop
인터럽트가 활성화되어 있지 않으면 wfi는 영원히 기다리므로, 거기에 도달하기 전에 인터럽트를 활성화하세요. csrs는 활성화 비트를 켜고, mret은 핸들러에서 반환합니다.
예시
csrsi mstatus, 8 # allow interrupts wfi # idles here until the button is pressed
