Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

signal_time()でassertされて、スタックオーバーフローとなることがある #43

Closed
ytoi opened this issue May 19, 2020 · 0 comments

Comments

@ytoi
Copy link
Contributor

ytoi commented May 19, 2020

周期を短くしたタスクを動作させた場合に

owered by TOPPERS/ASP3 RTOS of Hakoniwa
Initialization is completed..
System logging task is started.
GO TO THE START
../../kernel/time_event.c:563: Assertion `!sense_lock()' failed.
../../kernel/time_event.c:563: Assertion `!sense_lock()' failed.
:
:
../../kernel/time_event.c:search_region():search_region:not found error:addr=0x5ff6ffc
mpu_get_pointer():addr=0x5ff6ffc
ERROR:PREPARE pc=0x1ff0 sp=0x5ff7000
Exec Error code[0]=0xddf2 code[1]=0x301a type_id=0x0

というassertが出ることがある。
これはgpis_dri.cにてタスクコンテキストでlock_cpu()を呼んでいるが、割り込みを禁止していないため、unlock_cpu()が呼ばれるまでの間にタイマ割り込みが実行され、signal_time()を呼ぶことがあるため。
この場合、signal_time()の

signal_time(void)
{
	TMEVTB	*p_tmevtb;
	bool_t	callflag;

	assert(sense_context());
	assert(!sense_lock());   // ここでCPUロックのフラグを見ている

でassertされる。assertするとこの中でprintをしようとするが、さらにその中でassertが走り、というループを繰り返してスタックあふれが発生すると思われる。

@tmori tmori closed this as completed in 95f944d May 19, 2020
tmori pushed a commit that referenced this issue May 19, 2020
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant