美文网首页arduino玩转Arduino玩转Arduino
在 Arduino 上面使用 AtomThreads 系统

在 Arduino 上面使用 AtomThreads 系统

作者: Lupino | 来源:发表于2017-09-17 13:02 被阅读92次

    在 Arduino 上面直接写多任务的应用显然有些不完美,且开发也复杂。
    我在 watering 这个项目上使用了 SimpleTimer 作为多任务处理的基础,
    在设置的过程中,SimpleTimer 并没有有效的工作。

    使用操作系统将很好的解决多任务调度的。

    在一个凑巧的机会下,我找到了 AtomThreads ,它是一个小巧的系统,支持 8 位单片机。

    于是就封装 AtomThreads-ArduinoAtomThreads 可以直接在 Arduino 里面直接使用。

    #include <AtomThreads.h>
    #define IDLE_STACK_SIZE_BYTES 128
    #define MAIN_STACK_SIZE_BYTES 204
    #define DEFAULT_THREAD_PRIO 16
    static ATOM_TCB main_tcb;
    static uint8_t main_thread_stack[MAIN_STACK_SIZE_BYTES];
    static uint8_t idle_thread_stack[IDLE_STACK_SIZE_BYTES];
    uint8_t status;
    
    void setup(){
        SP = (int)&idle_thread_stack[(IDLE_STACK_SIZE_BYTES/2) - 1];
        status = atomOSInit(&idle_thread_stack[0], IDLE_STACK_SIZE_BYTES, FALSE);
        if (status == ATOM_OK) {
            avrInitSystemTickTimer();
            status = atomThreadCreate(&main_tcb,
                         DEFAULT_THREAD_PRIO, main_thread_func, 0,
                         &main_thread_stack[0],
                         MAIN_STACK_SIZE_BYTES,
                         FALSE);
            if (status == ATOM_OK) {
                atomOSStart();
            }
        }
    }
    
    static void main_thread_func (uint32_t) {
        // initialize digital pin LED_BUILTIN as an output.
        pinMode(LED_BUILTIN, OUTPUT);
        while (1) {
            loop();
        }
    }
    
    // Loop and print the time every second.
    void loop() {
        digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
        atomTimerDelay(SYSTEM_TICKS_PER_SEC);                       // wait for a second
        digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
        atomTimerDelay(SYSTEM_TICKS_PER_SEC); 
    }
    

    watering 中,通过使用 atomThreadCreate 创建不同的进程去处理不同的任务,通过 atomTimerRegisteratomTimerCancel 来控制自动背光灯。整个项目的可靠性和实时性比之前增强了许多,详见 https://github.com/Lupino/watering/blob/master/watering.ino

    相关文章

      网友评论

        本文标题:在 Arduino 上面使用 AtomThreads 系统

        本文链接:https://www.haomeiwen.com/subject/abvpsxtx.html