isme
isme - 认证专家
冰镇大西瓜

注册于 2 年前

回答
280
文章
17
关注者
23

/***************************************************************************** 
* 
* File Name :  main. c
* 
* Description:  main 
* 
* Copyright  (c)  2014 Winner Micro Electronic Design Co. ,  Ltd.  
* All rights reserved.  
* 
* Author :  dave
* 
* Date :  2014-6-14
*****************************************************************************/ 
#include "wm_include. h"

#define USER_TASK_QUEUE_SIZE             1
#define USER_TASK_QUEUE_TEST             0x01
static tls_os_queue_t *user_task_queue = NULL; 

static OS_STK TaskStk1[512]; 
static OS_STK TaskStk2[512]; 



static void user_task1 (void) 
{

    while (1) 
    {
        printf ("---  send msg\r\n") ; 
        // 发送队里消息
        tls_os_queue_send (user_task_queue,   (void *) USER_TASK_QUEUE_TEST,  0) ; 
        tls_os_time_delay (HZ) ; 
    }
}

static void user_task2 (void) 
{
    void *msg; 
    tls_os_status_t ret; 

    for  ( ;  ;  ) 
    {
        // 接收队里消息
        ret= tls_os_queue_receive (user_task_queue,   (void **) &msg,  0,  0) ; 
        if  (ret == TLS_OS_SUCCESS) 
        {
            switch ( (u32) msg) 
            {
            case USER_TASK_QUEUE_TEST:  // 收到指定的消息
                printf ("---  received msg\r\n") ; 
                break; 

            default: 
                break; 
            }
        }
    }
}

void UserMain (void) 
{
    printf ("\n user task \n") ; 
    // 创建 task1 用于发送队列消息
    tls_os_task_create (NULL,  "task1", 
                         ( void  (*) ) user_task1, 
                        NULL, 
                         (void *) TaskStk1,           /* task's stack start address */
                        sizeof (TaskStk1) ,  /* task's stack size,  unit: byte */
                        31, 
                        0) ; 
    // 创建 task2 用于接收队里消息
    tls_os_task_create (NULL,  "task2", 
                         ( void  (*) ) user_task2, 
                        NULL, 
                         (void *) TaskStk2,           /* task's stack start address */
                        sizeof (TaskStk2) ,  /* task's stack size,  unit: byte */
                        32, 
                        0) ; 
    // 创建消息队列
    tls_os_queue_create (&user_task_queue,  USER_TASK_QUEUE_SIZE) ; 

#if DEMO_CONSOLE
    CreateDemoTask () ; 
#endif
//用户自己的 task
}

image. png

设置中断优先级就可以了, 默认硬件中断都是最高优先级, 也可自行调整.

任务不要挂起, 在任务里面等待信号量即可.

批量出货 esd 管子是随芯片赠送的哦

电源的话, 分开设计会好些, 地的话只有底部焊盘一个地.

可以支持, SDK 里面有两套蓝牙协议栈, 默认用的是 NimBLE 蓝牙协议栈, 只支持 BLE, 而另外一个蓝牙协议栈支持 BT 和 BLE, 相对编译后的固件也会大一些, 可以通过宏定义选择. 两个蓝牙协议栈分别参考以下两个文档:
image. png

tls_gpio_write 比 tls_bitband_write 考虑的东西相对多一些, 所以判断语句也会多一些, 参数也更少更加方便用户调用, 相对效率比后者低一些, 如果不考虑效率用 tls_gpio_write 即可.

W80X 系列芯片, 通过串口下载的 fls 固件包含 secboot. img (启动引导程序) 和 user. img (用户程序) 两部分组成.
image. png
而 CK-LINK 下载时, 只会更新 user. img, 所以下载时不能勾选擦除选项, 否则会把 secboot 引导程序擦除掉, 导致即使烧录成功也启动不了, 打印 ccc.
如果芯片是空片, 或有擦除过 flash (串口一直打印 ccc) , 则应当先通过串口下载一次. fls 格式的固件后, 再将 CDK 参考下图选项配置, 再通过 CK-LINK 下载, 即可解决烧录启动不了问题.
image. png

log 截图看下, 大概率内存没有释放导致的.

可以通过以下接口动态更改 CPU 频率

    extern void tls_sys_clk_set () ; 
    tls_sys_clk_set (CPU_CLK_240M) ; 

经典蓝牙音频使用效果不好, 声音会断断续续, 所以都不建议客户使用.

发布
问题