Put printk in critical
parent
9e5ee183af
commit
cc71e9e673
|
@ -197,6 +197,7 @@ public:
|
|||
virtual void test_async(test_context_t *context) override
|
||||
{
|
||||
session_.ctx = context;
|
||||
session_.ctx->channel = channel_;
|
||||
}
|
||||
|
||||
virtual void transmit_async(const volatile void *src, volatile void *dest, bool src_inc, bool dest_inc, size_t element_size, size_t count, size_t burst_size, SemaphoreHandle_t completion_event) override
|
||||
|
@ -414,8 +415,8 @@ public:
|
|||
uint32_t axi_master = dmac_.add_lru_axi_master();
|
||||
session_.axi_master = axi_master;
|
||||
|
||||
ctl_u.ch_ctl.sms = axi_master;
|
||||
ctl_u.ch_ctl.dms = axi_master;
|
||||
ctl_u.ch_ctl.sms = DMAC_MASTER1;
|
||||
ctl_u.ch_ctl.dms = DMAC_MASTER2;
|
||||
|
||||
writeq(ctl_u.data, &dma.ctl);
|
||||
|
||||
|
@ -546,8 +547,8 @@ public:
|
|||
uint32_t axi_master = dmac_.add_lru_axi_master();
|
||||
session_.axi_master = axi_master;
|
||||
|
||||
ctl_u.ch_ctl.sms = axi_master;
|
||||
ctl_u.ch_ctl.dms = axi_master;
|
||||
ctl_u.ch_ctl.sms = DMAC_MASTER1;
|
||||
ctl_u.ch_ctl.dms = DMAC_MASTER2;
|
||||
|
||||
writeq(ctl_u.data, &dma.ctl);
|
||||
|
||||
|
@ -669,6 +670,15 @@ private:
|
|||
driver.session_.ctx->flag ++;
|
||||
xSemaphoreGiveFromISR(driver.session_.completion_event, &xHigherPriorityTaskWoken);
|
||||
driver.session_.ctx->flag ++;
|
||||
//driver.session_.completion_event = NULL;
|
||||
//driver.session_.axi_master = 0;
|
||||
//driver.session_.is_loop = 0;
|
||||
//driver.session_.flow_control = DMAC_MEM2MEM_DMA;
|
||||
//driver.session_.element_size = 0;
|
||||
//driver.session_.count = 0;
|
||||
//driver.session_.alloc_mem = NULL;
|
||||
//driver.session_.dest = NULL;
|
||||
|
||||
}
|
||||
|
||||
if (xHigherPriorityTaskWoken)
|
||||
|
|
|
@ -348,6 +348,11 @@ private:
|
|||
uint64_t input_size = layer->kernel_calc_type_cfg.data.channel_switch_addr * 64 * (layer->image_channel_num.data.i_ch_num + 1);
|
||||
|
||||
dma_set_request_source(dma_ch_, dma_req_);
|
||||
#if PRINT_DMA_CH
|
||||
dma_test_async(dma_ch_, &context_);
|
||||
|
||||
printk("kpu intput: dma=%d \n", context_.channel);
|
||||
#endif
|
||||
dma_transmit_async(dma_ch_, src, (void *)(uintptr_t)((uint8_t *)AI_IO_BASE_ADDR + layer->image_addr.data.image_src_addr * 64), 1, 1, sizeof(uint64_t), input_size / 8, 16, completion_event_);
|
||||
}
|
||||
|
||||
|
@ -808,6 +813,14 @@ private:
|
|||
kpu_.interrupt_mask.reg = 0b111;
|
||||
layer.dma_parameter.data.send_data_out = 1;
|
||||
dma_set_request_source(dma_ch_, dma_req_);
|
||||
#if PRINT_DMA_CH
|
||||
context_.flag = 0;
|
||||
dma_test_async(dma_ch_, &context_);
|
||||
|
||||
printk("kpu output: dma=%d \n", context_.channel);
|
||||
#endif
|
||||
//int len = (layer.dma_parameter.data.dma_total_byte + 8) / 8 * sizeof(uint64_t);
|
||||
//uint8_t *dest_io = (uint8_t *)iomem_malloc(len);
|
||||
dma_transmit_async(dma_ch_, (void *)(&kpu_.fifo_data_out), (void *)dest, 0, 1, sizeof(uint64_t), (layer.dma_parameter.data.dma_total_byte + 8) / 8, 8, completion_event_);
|
||||
}
|
||||
else
|
||||
|
@ -1040,8 +1053,10 @@ private:
|
|||
SemaphoreHandle_t free_mutex_;
|
||||
uintptr_t dma_ch_;
|
||||
SemaphoreHandle_t completion_event_;
|
||||
|
||||
uint8_t done_flag_ = 0;
|
||||
kpu_model_context_t ctx_;
|
||||
test_context_t context_;
|
||||
#if KPU_DEBUG
|
||||
struct timeval time_;
|
||||
struct timeval last_time_;
|
||||
|
|
|
@ -43,6 +43,8 @@
|
|||
|
||||
#include <printf.h>
|
||||
#include <stddef.h>
|
||||
#include <FreeRTOS.h>
|
||||
#include <task.h>
|
||||
|
||||
/*
|
||||
* Configuration
|
||||
|
@ -645,6 +647,7 @@ static void uart_putf(void* unused, char c)
|
|||
|
||||
int printk(const char* format, ...)
|
||||
{
|
||||
portENTER_CRITICAL();
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, format);
|
||||
|
@ -654,6 +657,7 @@ int printk(const char* format, ...)
|
|||
/* End protected code */
|
||||
corelock_unlock(&lock);
|
||||
va_end(ap);
|
||||
portEXIT_CRITICAL();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -227,6 +227,7 @@ typedef struct _cbc_context
|
|||
typedef struct _test_context_t
|
||||
{
|
||||
uint32_t flag;
|
||||
uint32_t channel;
|
||||
} test_context_t;
|
||||
|
||||
typedef void(*timer_on_tick_t)(void* userdata);
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -233,6 +233,38 @@ void vTask2()
|
|||
}
|
||||
}
|
||||
|
||||
void vTask3()
|
||||
{
|
||||
int32_t index = 0;
|
||||
struct timeval get_time[2];
|
||||
int32_t addr = 0;
|
||||
|
||||
while (1)
|
||||
{
|
||||
//_lock_acquire_recursive(&flash_lock);
|
||||
gettimeofday(&get_time[0], NULL);
|
||||
if(addr < 1024*1024*10)
|
||||
addr = 0;
|
||||
fseek(stream,addr,SEEK_SET);
|
||||
fwrite(msg, 1, strlen(msg)+1, stream);
|
||||
fseek(stream,addr,SEEK_SET);
|
||||
fread(buffer, 1, strlen(msg)+1, stream);
|
||||
gettimeofday(&get_time[1], NULL);
|
||||
for(index=0; index < strlen(msg); index++)
|
||||
{
|
||||
if(buffer[index] != msg[index])
|
||||
{
|
||||
printk("task2 sd err:0x%x 0x%x\n", buffer[index], msg[index]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
addr += 100;
|
||||
//printf("vtask2:%f ms \n", ((get_time[1].tv_sec - get_time[0].tv_sec)*1000*1000 + (get_time[1].tv_usec - get_time[0].tv_usec))/1000.0);
|
||||
//_lock_release_recursive(&flash_lock);
|
||||
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||
}
|
||||
}
|
||||
|
||||
void detect()
|
||||
{
|
||||
int time_count = 0;
|
||||
|
@ -263,16 +295,19 @@ void detect()
|
|||
//}
|
||||
#endif
|
||||
if(face_detect_info.obj_number)
|
||||
{
|
||||
printk("=====>face detect %d \n", face_detect_info.obj_number);
|
||||
if(!task1_flag)
|
||||
printk("==========>%d %d \n", task1_flag, task2_flag);
|
||||
if(!task2_flag)
|
||||
printk("==========>>%d %d \n", task1_flag, task2_flag);
|
||||
sprintf(display, "task1 = %d task2 = %d", task1_flag, task2_flag);
|
||||
if(!task1_flag)
|
||||
printk("==========>%d %d \n", task1_flag, task2_flag);
|
||||
if(!task2_flag)
|
||||
printk("==========>>%d %d \n", task1_flag, task2_flag);
|
||||
}
|
||||
|
||||
//sprintf(display, "task1 = %d task2 = %d", task1_flag, task2_flag);
|
||||
task1_flag = 0;
|
||||
task2_flag = 0;
|
||||
|
||||
lcd_draw_string(50, 50, display, RED);
|
||||
//lcd_draw_string(50, 50, display, RED);
|
||||
|
||||
lcd_draw_picture(0, 0, 320, 240, lcd_gram);
|
||||
camera_ctx.gram_mux ^= 0x01;
|
||||
|
@ -378,6 +413,7 @@ int main(void)
|
|||
xTaskCreate(detect, "detect", 2048*2, NULL, 3, NULL);
|
||||
xTaskCreate(vTask1, "vTask1", 2048, NULL, 3, NULL);
|
||||
xTaskCreate(vTask2, "vTask2", 2048, NULL, 3, NULL);
|
||||
//xTaskCreate(vTask3, "vTask3", 2048, NULL, 3, NULL);
|
||||
xTaskCreate(task_list, "task_list", 2048, NULL, 2, NULL);
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue