亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? shell.c

?? arm_bootloader _flash writter &USB
?? C
字號:
#include <stdio.h>
#include <string.h>
#include <ucos_ii.h> //ucos2
#include "config.h"
#include "os_c_lib_func.h"
#include "os_uart.h"
#include "os_shell.h"
#include "hal/isr.h"
#include "hal/hal_uart.h"

// #define DEBUG_SHELL

// Global Variable declaration
static function_entity_t func_list[];
OS_STK CmdShell_Stk[TaskStkLength];   // 64K



/* ---------- */


int r1(int argc, char *argv[])
{
    unsigned int addr;
    unsigned char value;
    
    if(argc < 1)
    {
        OS_printf("Usage: r1 32-bit_addr\n");
        OS_printf("Notice: read a non-legal address will cause system fail !!\n");
        return -1;
    }

    sscanf(argv[0], "%x", &addr);
    value = *(unsigned char*)(addr);
    OS_printf("Memory 0x%08X = 0x%02X\n", addr, value);

	return 0;
}

int r2(int argc, char *argv[])
{
    unsigned int addr;
    unsigned short value;
    
    if(argc < 1)
    {
        OS_printf("Usage: r2 32-bit_addr\n");
        OS_printf("Notice: read a non-legal address will cause system fail !!\n");
        return -1;
    }

    sscanf(argv[0], "%x", &addr);
    addr = addr & (~1); // mask LSB-1bits to avoid memory mis-alignment
    value = *(unsigned short*)(addr);
    OS_printf("Memory 0x%08X = 0x%04X\n", addr, value);

	return 0;
}

int r4(int argc, char *argv[])
{
    unsigned int addr;
    unsigned int value;
    
    if(argc < 1)
    {
        OS_printf("Usage: r4 32-bit_addr\n");
        OS_printf("Notice: read a non-legal address will cause system fail !!\n");
        return -1;
    }

    sscanf(argv[0], "%x", &addr);
    addr = addr & (~3); // mask LSB-2bits to avoid memory mis-alignment
    value = *(unsigned int*)(addr);
    OS_printf("Memory 0x%08X = 0x%08X\n", addr, value);

	return 0;
}


/* ---------- */

int w1(int argc, char *argv[])
{
    unsigned int addr, value;
    
    if(argc < 2)
    {
        OS_printf("Usage: w1 32-bit_addr 8-bit_value\n");
        OS_printf("Notice: write a non-legal address will cause system fail !!\n");
        return -1;
    }

    sscanf(argv[0], "%x", &addr);
    sscanf(argv[1], "%x", &value);
    *(unsigned char*)(addr) = (unsigned char)(value & 0xFF);
    OS_printf("Write 0x%02X to 0x%08X\n", value, addr);

	return 0;
}

int w2(int argc, char *argv[])
{
    unsigned int addr, value;
    
    if(argc < 2)
    {
        OS_printf("Usage: r2 32-bit_addr 16-bit_value\n");
        OS_printf("Notice: write a non-legal address will cause system fail !!\n");
        return -1;
    }
    
    sscanf(argv[0], "%x", &addr);
    sscanf(argv[1], "%x", &value);
    addr = addr & (~1); // mask LSB-1bits to avoid memory mis-alignment
    *(unsigned short*)(addr) = (unsigned short)(value & 0xFFFF);
    OS_printf("Write 0x%04X to 0x%08X\n", value, addr);

	return 0;
}

int w4(int argc, char *argv[])
{
    unsigned int addr;
    unsigned int value;
    
    if(argc < 2)
    {
        OS_printf("Usage: w4 32-bit_addr 32-bit_value\n");
        OS_printf("Notice: writea non-legal address will cause system fail !!\n");
        return -1;
    }

    sscanf(argv[0], "%x", &addr);
    sscanf(argv[1], "%x", &value);
    addr = addr & (~3); // mask LSB-2bits to avoid memory mis-alignment
    *(unsigned int*)(addr) = value;
    OS_printf("Write 0x%08X to 0x%08X\n", value, addr);

	return 0;
}


/* ---------- */


int show_help(int argc, char *argv[])
{
    function_entity_t *func_ptr = func_list;
    
    OS_printf("Support command of "SHELL_NAME": \n");
    
    while(func_ptr->cmd != NULL)    // go through the function table
    {
        OS_printf("%-10s%s\n",
            func_ptr->cmd,
            func_ptr->help_text);
        func_ptr++;
    }
	return 0;
}

/* ---------- */

static void show_irq_operation_help(void)
{
        OS_printf(
            "Usage: irq [ show | reset ]\n"
            "   show:   display current IRQ status\n"
            "   reset:  reset IRQ count\n");
}

int irq_operation(int argc, char *argv[])
{
    int i;
    INT_table_t* int_table = isr_get_int_table();
    
    if(argc < 1)
    {
        show_irq_operation_help();
        return 0;
    }
    
    if(strcmp(argv[0], "show") == 0)
    {        
        /*
        12345678123456789012123456789012345678123456789
        IRQ#    IRQ name    # of ISR hooked   Call count
        8       14          20                10
        */
        OS_printf("IRQ#    IRQ name    # of ISR hooked   Call count\n");
        for(i=0; i< IRQ_INT_NO; i++)
        {
            OS_printf("%-8d%-12s%-18d%-d\n",
                i,
                int_table->irq_name[i], 
                int_table->irq_entry[i].num_irq_func,
                int_table->irq_count[i]);
        }
    }
    else if(strcmp(argv[0], "reset") == 0)
    {
        isr_reset_irq_count();
    }
    else
    {
        show_irq_operation_help();
    }
    
    return 0;
}


/* ---------- */

void show_uart_operation_help(void)
{
    OS_printf(
        "Usage: uart [ show | flush ]\n"
        "   show:   display current UART status\n"
        "   flush:  flush UART buffer\n");
}

int uart_operation(int argc, char *argv[])
{
    uart_buf_t *os_uart_buf = uart_get_buf();
	hal_uart_buf_t *hal_uart_buf = hal_uart_get_buf();
    
    if(argc < 1)
    {
        show_uart_operation_help();
        return 0;
    }
    
    if(strcmp(argv[0], "show") == 0)
    {   
        OS_printf(
            "HAL Level:\nTX status\n"
            "\tputindex:%d\n\tgetindex:%d\n\tbuffersize:%d\n\n",
            hal_uart_buf->tx_buf.putindex, hal_uart_buf->tx_buf.getindex, hal_uart_buf->tx_buf.buffersize);
            
        OS_printf(
            "OS Level:\nTX status\n"
            "\tputindex:%d\n\tgetindex:%d\n\tbuffersize:%d\n"
            "RX status\n"
            "\tputindex:%d\n\tgetindex:%d\n\tbuffersize:%d\n\n",
            os_uart_buf->tx_buf.putindex, os_uart_buf->tx_buf.getindex, os_uart_buf->tx_buf.buffersize,
            os_uart_buf->rx_buf.putindex, os_uart_buf->rx_buf.getindex, os_uart_buf->rx_buf.buffersize);
    }
    else if(strcmp(argv[0], "flush") == 0)
    {
        hal_ring_flush(&(hal_uart_buf->tx_buf));
        ring_flush(&(os_uart_buf->tx_buf));
        ring_flush(&(os_uart_buf->rx_buf));
    }
    else
    {
        show_uart_operation_help();
    }
    return 0;

}


/* ---------- */


static function_entity_t func_list[] = 
{
    {"help", show_help, "Show this help"},
    {"irq", irq_operation, "Show IRQ status, incluing IRQ name, # of ISR hooked, Call count"},
    {"r1", r1, "Read 1-byte from memory"},
    {"r2", r2, "Read 2-byte from memory"},
    {"r4", r4, "Read 4-byte from memory"},
    {"uart", uart_operation, "UART related operation"},
    {"w1", w1, "Write 1-byte to memory"},
    {"w2", w2, "Write 2-byte to memory"},
    {"w4", w4, "Write 4-byte to memory"},
    {NULL,  NULL},
};


/* ---------- */


int exec_cmd(int argc, char *argv[])
{
    function_entity_t *func_ptr = func_list;
    
    while(func_ptr->cmd != NULL)    // go through the function table
    {
        if(strcmp(func_ptr->cmd, argv[0]) == 0)
        {
            return func_ptr->func((argc-1), argv+1);   // call the function & ignore 1st parameter (parameter consumed @ this stage)
        }
        func_ptr++;
    }
    
    OS_printf("Command not supported. Type 'help' for available commands\n");
    return -1;
}

int parse_cmd(int *argc, char *argv[], int max_cmd, char *cmd_line)
{
    char *ptr, *sep = " ";
    
    *argc = 0;
    
    ptr = strtok(cmd_line, sep);
    while(ptr != NULL)
    {
        if(*argc < max_cmd)
        {
            argv[*argc] = ptr;
            (*argc)++;
            ptr = strtok(NULL, sep);
        }
        else
            return -1;
    }
    return 0;
}

void CmdShell_Task(void *pdata)
{
    char cmd_buf[SHELL_COMMAND_LINE_BUFFER_SIZE];
    int argc;
    char *argv[SHELL_MAX_NUM_COMMAND_TOKEN];
    
    while(1)
    {
        int len_str;
#ifdef DEBUG_SHELL
        int i;
#endif
        OS_printf(SHELL_PROMPT);
        len_str = OS_uart_getstring(cmd_buf, SHELL_COMMAND_LINE_BUFFER_SIZE);
        if(len_str > 0)
        {
            if(parse_cmd(&argc, argv, SHELL_MAX_NUM_COMMAND_TOKEN, cmd_buf) < 0)
                OS_printf("[SHELL] Error: Too many tokens, only %d commands will be processed\n", SHELL_MAX_NUM_COMMAND_TOKEN);
#ifdef DEBUG_SHELL
            OS_printf("Length_string: %d\n", strlen(cmd_buf));
            OS_printf("Parse the input command... \n");
            OS_printf("Num of tokens: %d\n", argc);
            for(i=0; i<argc; i++)
            {
                OS_printf("%d, %d, %s\n", i, strlen(argv[i]), argv[i]);
            }
#endif
            exec_cmd(argc, argv);
        }
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品99国产精品| 成人少妇影院yyyy| 国产精品丝袜久久久久久app| 欧美综合天天夜夜久久| 国产乱妇无码大片在线观看| 亚洲第一二三四区| 日韩毛片精品高清免费| 久久久www免费人成精品| 欧美麻豆精品久久久久久| 99精品视频在线观看| 国产麻豆精品视频| 日韩电影在线看| 一区二区在线免费观看| 国产精品色呦呦| 久久网站最新地址| 日韩一区二区三区电影在线观看| 一本大道av伊人久久综合| 国产资源在线一区| 蜜臀av性久久久久av蜜臀妖精| 亚洲在线观看免费| 亚洲欧美日韩一区二区| 国产精品久久久久aaaa| 久久久久久久久久久久久久久99 | 国产精品高潮呻吟久久| 精品国产91洋老外米糕| 日韩欧美国产综合一区| 欧美色爱综合网| 欧美色综合天天久久综合精品| 99精品欧美一区二区蜜桃免费| 国产精品亚洲专一区二区三区| 精品制服美女久久| 久久成人免费网站| 青娱乐精品视频在线| 日日骚欧美日韩| 日韩成人一区二区三区在线观看| 亚洲妇熟xx妇色黄| 亚洲r级在线视频| 亚洲高清在线视频| 一区二区三区在线观看动漫| 亚洲女同ⅹxx女同tv| 亚洲婷婷国产精品电影人久久| 国产精品视频一区二区三区不卡| 国产精品视频一二三区| 亚洲图片你懂的| 亚洲一区二区精品久久av| 亚洲一区二区三区四区五区黄| 亚洲在线成人精品| 丝袜美腿亚洲综合| 美女免费视频一区| 国产福利不卡视频| 成人v精品蜜桃久久一区| 99久久综合99久久综合网站| 色综合久久精品| 这里只有精品99re| 精品日韩欧美一区二区| 国产女主播在线一区二区| 中文字幕在线观看不卡视频| 亚洲精品成a人| 舔着乳尖日韩一区| 国产一区欧美二区| 99精品久久久久久| 欧美日韩中文精品| 日韩三级av在线播放| 欧美激情一区二区三区四区| 亚洲欧美日韩国产一区二区三区 | 懂色av一区二区在线播放| 成人永久aaa| 欧美色图片你懂的| 日韩久久久久久| 国产精品久久午夜夜伦鲁鲁| 亚洲一区免费观看| 激情国产一区二区| 97精品超碰一区二区三区| 欧美精品高清视频| 欧美国产日韩精品免费观看| 一区二区成人在线观看| 久久国产视频网| 91日韩在线专区| 91精品国产综合久久久久久 | 亚洲成人黄色影院| 国产永久精品大片wwwapp| 91在线精品一区二区| 欧美久久久影院| 国产精品女同互慰在线看| 亚洲h精品动漫在线观看| 国产精品一卡二卡| 欧美精品在欧美一区二区少妇| 久久久www成人免费无遮挡大片| 樱花草国产18久久久久| 国内偷窥港台综合视频在线播放| 在线观看三级视频欧美| 久久久精品人体av艺术| 蜜桃av一区二区在线观看| 99精品久久只有精品| 精品国产区一区| 亚洲成人免费观看| 91免费在线播放| 久久久精品国产免费观看同学| 天天综合天天综合色| 色综合天天综合狠狠| 国产亚洲精品资源在线26u| 三级一区在线视频先锋| 99精品久久只有精品| 国产亚洲一区二区三区四区| 日韩精品色哟哟| 在线观看免费一区| 中文字幕一区二区日韩精品绯色| 久久精工是国产品牌吗| 欧美剧情片在线观看| 亚洲欧美日韩国产综合| 成人福利视频网站| 精品国产一区二区三区不卡| 午夜天堂影视香蕉久久| 欧美做爰猛烈大尺度电影无法无天| 中文字幕免费一区| 国产福利一区二区| 26uuu精品一区二区| 男人的天堂久久精品| 欧美精品日日鲁夜夜添| 亚洲一区二区三区四区在线| 色天天综合久久久久综合片| 国产精品久久久久婷婷| 高清不卡一二三区| 国产午夜精品在线观看| 国产一区二区美女诱惑| 精品国产99国产精品| 激情综合网激情| ww亚洲ww在线观看国产| 国产原创一区二区三区| 亚洲精品在线网站| 国内精品国产成人国产三级粉色| 日韩一级片网站| 精品制服美女丁香| 久久综合色婷婷| 国产不卡视频一区二区三区| 国产精品女主播av| 91在线丨porny丨国产| 亚洲视频一区二区免费在线观看| 99riav一区二区三区| 亚洲青青青在线视频| 91免费国产在线观看| 亚洲精品视频在线看| 色中色一区二区| 午夜欧美视频在线观看 | 国产欧美一区二区精品久导航| 国产美女视频一区| 欧美激情在线一区二区| 99视频精品全部免费在线| 亚洲欧美另类小说| 欧美三级中文字| 青青草97国产精品免费观看无弹窗版| 日韩欧美国产一区在线观看| 国产一区二区三区在线看麻豆| 久久九九影视网| 99re热这里只有精品视频| 亚洲国产美女搞黄色| 欧美一区二区免费视频| 精品一区二区三区在线观看国产 | **欧美大码日韩| 欧美在线观看一区| 麻豆久久久久久久| 中文字幕精品一区二区精品绿巨人| 91美女片黄在线| 午夜精品久久久久久不卡8050| 日韩三区在线观看| 高清不卡一二三区| 亚洲超碰精品一区二区| 精品三级在线看| 99re在线精品| 免费一级片91| 国产精品乱码久久久久久| 久久亚洲精精品中文字幕早川悠里| 国产精品主播直播| 亚洲在线视频免费观看| 精品福利在线导航| 色噜噜狠狠成人网p站| 奇米精品一区二区三区在线观看一 | 91精品国产入口| 丰满白嫩尤物一区二区| 三级精品在线观看| 国产精品麻豆99久久久久久| 欧美日韩一区在线观看| 国产福利一区二区三区视频| 亚洲夂夂婷婷色拍ww47| 久久久精品蜜桃| 欧美喷潮久久久xxxxx| 国产91精品露脸国语对白| 丝袜亚洲另类欧美| 亚洲三级久久久| 久久九九全国免费| 4438成人网| 色哟哟精品一区| 国产精品一区二区91| 日韩电影在线一区二区三区| 亚洲少妇最新在线视频| 久久久久青草大香线综合精品| 在线观看免费视频综合| 99精品欧美一区二区三区小说| 国内不卡的二区三区中文字幕| 亚洲综合区在线|