Put printk in critical

fix_cache
xiangbingj 2019-10-21 13:39:09 +08:00
parent 9e5ee183af
commit cc71e9e673
7 changed files with 76 additions and 10 deletions

View File

@ -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)

View File

@ -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_;

View File

@ -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;
}

View File

@ -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.

View File

@ -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);
}