مشکل با GPIO در open cpu ماژول mc60

سلام
من کار با open cpu ماژول mc60 شروع کردم
مثال های خود sdk رو دارم تست میکنم
توی مثال EXAMPLE_GPIO وقتی دارم پایه رو عوض میکنم تا به جای PINNAME_NETLIGHT مثلا پایه PINNAME_GPIO2 به عنوان خروجی تعریف بشه و led متصل به این پایه روشن خاموش بشه هیچ اتفاقی نمی افته انگار اصلا کدی نوشته نشده
داکیومنت ها رو میخوندم این پایه قابلیت خروجی شدن داره و توی شماتیک برد راه انداز هم به led وصله چرا led روشن خاموش نمیشه موندم

یه سوال دیگه هم داشت وقتی از open cpu استفاده میکنیم میتونیم توی while کد هایی مثل کد هایی که برای واحد های مختلف میکروکنترلر های دیگه مینوشتیم بنویسیم منظور اینه open cpu محدودیتی داره یا نه؟

دوست عزیز چندین پست در مورد تست پله پله در سایت هست
بعد از کامپیال نیاز هست یک برنامه ران بشه تا کد نهایی ایجاد بشه ایا همه این مراحل را انجام میدید؟
ایا اموزشها را خوندید کامل؟

بله آموزش های داخل سایت رو خوندم و تست کردم کار میکنن
من مشکلم الان این هست کد بلینکر برای io های ماژول مینویسم کار نمیکنه

#include "ql_trace.h"
#include "ql_system.h"
#include "ql_gpio.h"
#include "ql_stdlib.h"
#include "ql_error.h"
#include "ql_uart.h"


#define DEBUG_ENABLE 1
#if DEBUG_ENABLE > 0
#define DEBUG_PORT  UART_PORT1
#define DBG_BUF_LEN   512
static char DBG_BUFFER[DBG_BUF_LEN];
#define APP_DEBUG(FORMAT,...) {\
    Ql_memset(DBG_BUFFER, 0, DBG_BUF_LEN);\
    Ql_sprintf(DBG_BUFFER,FORMAT,##__VA_ARGS__); \
    if (UART_PORT2 == (DEBUG_PORT)) \
    {\
        Ql_Debug_Trace(DBG_BUFFER);\
    } else {\
        Ql_UART_Write((Enum_SerialPort)(DEBUG_PORT), (u8*)(DBG_BUFFER), Ql_strlen((const char *)(DBG_BUFFER)));\
    }\
}
#else
#define APP_DEBUG(FORMAT,...) 
#endif


static void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void* customizedPara)
{
     
}




static void GPIO_Program(void)
{
    // Specify a GPIO pin
    Enum_PinName  gpioPin = PINNAME_GPIO2;

    // Define the initial level for GPIO pin
    Enum_PinLevel gpioLvl = PINLEVEL_HIGH;

    // Initialize the GPIO pin (output high level, pull up)
    Ql_GPIO_Init(gpioPin, PINDIRECTION_OUT, gpioLvl, PINPULLSEL_PULLUP);
    APP_DEBUG("<-- Initialize GPIO pin (PINNAME_STATUS): output, high level, pull up -->\r\n");

    // Get the direction of GPIO
    APP_DEBUG("<-- Get the GPIO direction: %d -->\r\n", Ql_GPIO_GetDirection(gpioPin));

    // Get the level value of GPIO
    APP_DEBUG("<-- Get the GPIO level value: %d -->\r\n\r\n", Ql_GPIO_GetLevel(gpioPin));

    // Set the GPIO level to low after 500ms.
    APP_DEBUG("<-- Set the GPIO level to low after 500ms -->\r\n");
    Ql_Sleep(500);
    Ql_GPIO_SetLevel(gpioPin, PINLEVEL_LOW);
    APP_DEBUG("<-- Get the GPIO level value: %d -->\r\n\r\n", Ql_GPIO_GetLevel(gpioPin));

    // Set the GPIO level to high after 500ms.
    APP_DEBUG("<-- Set the GPIO level to high after 500ms -->\r\n");
    Ql_Sleep(500);
    Ql_GPIO_SetLevel(gpioPin, PINLEVEL_HIGH);
    APP_DEBUG("<-- Get the GPIO level value: %d -->\r\n", Ql_GPIO_GetLevel(gpioPin));
}

/************************************************************************/
/* The entrance for this example application                            */
/************************************************************************/
void proc_main_task(s32 taskId)
{
    s32 ret;
    ST_MSG msg;

    // Register & open UART port
    ret = Ql_UART_Register(UART_PORT1, CallBack_UART_Hdlr, NULL);
    if (ret < QL_RET_OK)
    {
        Ql_Debug_Trace("Fail to register serial port[%d], ret=%d\r\n", UART_PORT1, ret);
    }
    ret = Ql_UART_Open(UART_PORT1, 115200, FC_NONE);
    if (ret < QL_RET_OK)
    {
        Ql_Debug_Trace("Fail to open serial port[%d], ret=%d\r\n", UART_PORT1, ret);
    }
    
    APP_DEBUG("\r\n<-- OpenCPU: GPIO Example -->\r\n");

    // Start to program GPIO pin
    GPIO_Program();

    // Start message loop of this task
    while (TRUE)
    {
        Ql_OS_GetMessage(&msg);
        switch(msg.message)
        {
        case MSG_ID_USER_START:
            break;
        default:
            break;
        }
    }
}

سلام. پیشنهاد میکنم این مطلب رو با دقت از ابتدا تا انتها بخونید و مرحله مرحله باهاش پیش برید

بعد از این که تونستید روی پین نت لایت چشمک زن رو راه اندازی کنید پین رو تغییر بدید.

در مورد قسمت دوم سوالتون:
شما میکروکنترلر رو به طور کامل در اختیار ندارید و کد شما فقط بخشی از پردازش کل ماژول هست. به همین دلیل باید از توابعی که داخل sdk ارائه شده استفاده کنید.

1 پسندیده

معمولا این اتفاق زمانی می افتد که تابعتون رو در قسمت کانفیگ تعریف نکرده باشید.