Hallo

Das ist nicht so einfach, denn die Servofunktion ist durch die Verwendung von Sleep() blockierend für das RP6-Tasksystem. Das bedeutet, wenn die Servos angesteuert werden, kann er nichts anders machen. Bevor wir uns aber in die Abgründe einer interruptgesteuerten Servofunktion stürzen, hier ein Versuch für einen Ansatz auf Basis der vorhandenen Funktion:
Code:
#include "RP6RobotBaseLib.h"

uint8_t radar_pos;
uint8_t radar[38][3]=\
{{10,14,15},{5,13,15},{10,12,25},{15,11,10},{10,10,10}\
,{5,9,10},{15,8,10},{10,7,15},{5,6,15},{10,5,25}\
,{10,6,15},{10,7,15},{15,8,10},{5,9,10},{10,10,10}\
,{15,11,10},{10,12,25},{5,13,15},{10,14,15},{10,15,15}\
,{10,16,15},{10,17,15},{10,18,15},{10,19,15},{10,20,10}\
,{15,21,10},{10,22,25},{5,23,15},{10,24,15},{5,23,15}\
,{10,22,25},{15,21,10},{10,20,10},{10,19,15},{10,18,15}\
,{10,17,15},{10,16,15},{10,15,15}};

void servo(uint8_t s1, uint8_t s2, uint8_t s3)
{
}

int main(void)
{
	initRobotBase();
	radar_pos=0;
	startStopwatch1();
	moveAtSpeed(100,100);

	while(1)
	{
		if (getStopwatch1()>1000) // eine Radar-Position pro Sekunde
		{
			servo(radar[radar_pos][0],radar[radar_pos][1],radar[radar_pos][2]);
	   	radar_pos++;
	   	if (radar_pos == 38) radar_pos=0;
	   	setStopwatch1(0);
		}

		task_RP6System();
	}
	return(0);
}
Ich habe die Positionen in ein Array gefüllt. Nun kann man sie über einen Index (radar_pos) einzeln aufrufen. Vielleicht funktioniert es so im Wechsel mit den Taskaufrufen. btw: task_RP6System(); ruft alle Tasks auf, also auch task_ACS();

Vermutlich muss man in servo() hier noch was anpassen:

sleep(servo_delay-(w0+w1+w2));
//sleep(127);

Entweder zusätzlich oder alternativ noch einen task_RP6System()-Aufruf um die Stellzeit der Servos zu überbrücken. Ich hab's nicht getestet, weil ich grad mit anderen Spielereien beschäftigt bin.

Gruß

mic