menu "RT-Thread Kernel"

config RT_NAME_MAX
    int "The maximal size of kernel object name"
    range 2 32
    default 8
    help 
        Each kernel object, such as thread, timer, semaphore etc, has a name, the RT_NAME_MAX is the maximal size of this object name.

config RT_ALIGN_SIZE
    int "Alignment size for CPU architecture data access"
    default 4
    help
        Alignment size for CPU architecture data access

config RT_THREAD_PRIORITY_MAX
    int "The maximal level value of priority of thread"
    range 8 256
    default 32

config RT_TICK_PER_SECOND
    int "Tick frequency, Hz"
    range 10 1000
    default 100
    help
        System's tick frequency, Hz.

config RT_DEBUG
    bool "Enable debug features"
    default y

if RT_DEBUG

config RT_USING_OVERFLOW_CHECK
    bool "Using stack overflow checking"
    default y
    help
        Enable thread stack overflow checking. The stack overflow is checking when each thread switch.

config RT_DEBUG_INIT
    int "Enable system initialization informat print"
    default 0
    help
        print the procedure name of initialization

config RT_DEBUG_THREAD
    bool "Enable thread switch information dump"
    default n
    help
        print the switch to/from thread name when each thread context switch

endif

config RT_USING_HOOK
    bool "Enable system hook"
    default y
    help
        Enable the hook function when system running, such as idle thread hook, thread context switch etc.

config IDLE_THREAD_STACK_SIZE
    int "The stack size of idle thread"
    default 256

config RT_USING_TIMER_SOFT
    bool "Enable software timer with a timer thread"
    default n
    help
        the timeout function context of soft-timer is under a high priority timer thread.

if RT_USING_TIMER_SOFT
config RT_TIMER_THREAD_PRIO
    int "The priority level value of timer thread"
    default 4

config RT_TIMER_THREAD_STACK_SIZE
    int "The stack size of timer thread"
    default 512

endif

menu "Inter-Thread communication"

config RT_USING_SEMAPHORE
    bool "Enable semaphore"
    default y

config RT_USING_MUTEX
    bool "Enable mutex"
    default y

config RT_USING_EVENT
    bool "Enable event flag"
    default y

config RT_USING_MAILBOX
    bool "Enable mailbox"
    default y

config RT_USING_MESSAGEQUEUE
    bool "Enable message queue"
    default y

config RT_USING_SIGNALS
    bool "Enable signals"
    select RT_USING_MEMPOOL
    default n
    help
        A signal is an asynchronous notification sent to a specific thread 
        in order to notify it of an event that occurred.
endmenu

menu "Memory Management"

    config RT_USING_MEMPOOL
        bool "Using memory pool"
        default y
        help
            Using static memory fixed partition

    config RT_USING_MEMHEAP
        bool "Using memory heap object"
        default n
        help
            Using memory heap object to manage dynamic memory heap.

    config RT_USING_HEAP
        bool "Using dynamic memory management"
        default y

    if RT_USING_HEAP

        config RT_USING_SMALL_MEM
            bool "The memory management for small memory"

        config RT_USING_SLAB
            bool "Using SLAB memory management for large memory"

    endif

endmenu

menu "Kernel Device Object"

    config RT_USING_DEVICE
        bool "Using device object"
        default y

    config RT_USING_CONSOLE
        bool "Using console for rt_kprintf"
        default y

    if RT_USING_CONSOLE
        config RT_CONSOLEBUF_SIZE
            int "the buffer size for console log printf"
            default 128

        config RT_CONSOLE_DEVICE_NAME
            string "the device name for console"
            default "uart"
    endif

endmenu

config RT_USING_MODULE
    bool "The dynamic module feature"
    default n

endmenu