Code: Select all
function task(...) {
// ...
timer test_timer;
unsigned test_enabled = 1;
unsigned test_timeout;
test_timer :> test_timeout;
test_timeout += 100u * 1000u * 100u;
// ...
while (true) {
// ...
select {
// ...
case (test_enabled) => test_timer when timerafter(test_timeout) :> void :
printf(">>>>>>>>>>>>>>>>>>>>\n");
test_enabled = 0;
break;
// ...
}
}
}
Code: Select all
XUD_Result_t XUD_GetSetupBuffer(XUD_ep e, unsigned char buffer[], unsigned *datalength)
{
volatile XUD_ep_info *ep = (XUD_ep_info*) e;
unsigned isReset;
unsigned length;
unsigned lengthTail;
/* Check if we missed a reset */
if(ep->resetting)
{
printf("================== RESET1\n");
return XUD_RES_RST;
}
/* Store buffer address in EP structure */
ep->buffer = (unsigned) &buffer[0];
/* Mark EP as ready for SETUP data */
unsigned * array_ptr_setup = (unsigned *)ep->array_ptr_setup;
*array_ptr_setup = (unsigned) ep;
/* Wait for XUD response */
asm volatile("testct %0, res[%1]" : "=r"(isReset) : "r"(ep->client_chanend));
if(isReset)
{
printf("================== RESET2\n");
return XUD_RES_RST;
}
// ...
If I increase the value of test_timeout by *10u, it doesn't reset anymore.>>>>>>>>>>>>>>>>>>>> 1
================== RESET2
Any suggestions are welcome!