File tree Expand file tree Collapse file tree 2 files changed +15
-4
lines changed Expand file tree Collapse file tree 2 files changed +15
-4
lines changed Original file line number Diff line number Diff line change @@ -505,10 +505,6 @@ osStatus svcKernelStart (void) {
505
505
506
506
if (os_running ) { return osOK ; }
507
507
508
- if (osEventObs && osEventObs -> pre_start ) {
509
- osEventObs -> pre_start ();
510
- }
511
-
512
508
rt_tsk_prio (0U , os_tsk .run -> prio_base ); // Restore priority
513
509
if (os_tsk .run -> task_id == 0xFFU ) { // Idle Thread
514
510
__set_PSP (os_tsk .run -> tsk_stack + (8U * 4U )); // Setup PSP
@@ -567,6 +563,15 @@ osStatus osKernelStart (void) {
567
563
if (__get_IPSR () != 0U ) {
568
564
return osErrorISR ; // Not allowed in ISR
569
565
}
566
+
567
+ /* Call the pre-start event (from unprivileged mode) if the handler exists
568
+ * and the kernel is not running. */
569
+ /* FIXME osEventObs needs to be readable but not writable from unprivileged
570
+ * code. */
571
+ if (!osKernelRunning () && osEventObs && osEventObs -> pre_start ) {
572
+ osEventObs -> pre_start ();
573
+ }
574
+
570
575
switch (__get_CONTROL () & 0x03U ) {
571
576
case 0x00U : // Privileged Thread mode & MSP
572
577
__set_PSP ((uint32_t )(stack + 8 )); // Initial PSP
Original file line number Diff line number Diff line change @@ -51,5 +51,11 @@ const OsEventObserver *osEventObs;
51
51
52
52
void osRegisterForOsEvents (const OsEventObserver * observer )
53
53
{
54
+ static uint8_t has_been_called = 0 ;
55
+ if (has_been_called ) {
56
+ return ;
57
+ }
58
+ has_been_called = 1 ;
59
+
54
60
osEventObs = observer ;
55
61
}
You can’t perform that action at this time.
0 commit comments