あ死魚ωō眼 发表于 2015-4-13 15:56:31

STM32,UCOS时间管理相关问题,请求解答

用的是stm32f103C8单片机,做一个东西的时候要求1秒钟大约要往串口中写1000个数据,这是东西的要求。
现在采用的是UCOS的系统,但是实际中发现大约只能发到150个左右的数据/秒,而且可能是因为任务堆栈越堆越多,系统速度也越来越慢。
这个数据量不够应该是其他的任务调度把时间都占用了,但我想ADC也是一个任务,这任务的采样转换频率都可以达到1M,那为什么每秒1000个数据都发不出去??不能懂。。
然后我在网上也查了一下说是可以用把任务锁死的办法抢占CPU资源,不太明白什么意思,求吧内大神/老师指点一下

在途中 发表于 2015-4-20 17:30:22

这是一个DMA串口的初始化!!

在途中 发表于 2015-4-20 17:29:50

DMA速度快!!
void DMA4_Config(void)
{
    DMA_InitTypeDef DMA_InitStructure;

        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);        //开启DMA时钟
//        Motor_USART_NVIC_Config                                   //配置DMA中断

        /*设置DMA源:内存地址&串口数据寄存器地址*/
    DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR);//USART1_DR_Base;          

        /*内存地址(要传输的变量的指针)*/
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendMotor1Buff;
       
        /*方向:从内存到外设*/               
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;       
       
        /*传输大小DMA_BufferSize=SENDBUFF_SIZE*/       
    DMA_InitStructure.DMA_BufferSize = 8;
       
        /*外设地址不增*/          
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
       
        /*内存地址自增*/
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;       
       
        /*外设数据单位*/       
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
       
        /*内存数据单位 8bit*/
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;       
       
        /*DMA模式:一次传输,循环*/
    DMA_InitStructure.DMA_Mode =DMA_Mode_Circular ;       //        DMA_Mode_Normal ;//
       
        /*优先级:中*/       
    DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
       
        /*禁止内存到内存的传输        */
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
       
        /*配置DMA1的4通道*/                  
    DMA_Init(DMA1_Channel4, &DMA_InitStructure);           
        USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
        DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE);

   //DMA_ITConfig(DMA1_Channel4, DMA_IT_TC|DMA_IT_TE, ENABLE);
}

Mandelbrot_Set 发表于 2015-4-14 09:02:21

可以尝试dma发送.

andy_wsj 发表于 2015-4-13 18:09:14

1000个8bit数据如果使用115200的波特率来发送,不算额外开销,需要65ms左右,算上额外开销,问题也不大。你把发送单独做一个任务,优先级高一点,调试的时候不妨设置最高的优先级,然后发送使用中断方式,中断和任务之间使用一个信号量来管理,问题应该不大,试试看
页: [1]
查看完整版本: STM32,UCOS时间管理相关问题,请求解答

Baidu
map