功能開發
- 添加源檔案
- 中移模組使用者入口程式
- 線程建立
- 序列槽列印初始化
- GPIO輸出使用
- GPIO中斷的使用
- log等級
- ADC PWM 等其它功能
- 配置檔案
添加源檔案
個人喜歡在custom_main目錄下 添加使用者應用程式,故custom_main.mk 添加編譯的源檔案。然後将相關源檔案拷貝custom_main目錄下的src下

中移模組使用者入口程式
相當于c語言的main函數入口
#ifdef CM_OPENCPU_MODEL_POC
cm_pocAppTaskEntry();
#else
cm_test_keypad_init();
cm_test_alarm_init();
/* 調用cm_test_pwrkey_register()接口後,pwrkey邏輯由使用者實作。預設不調用此接口,pwrkey邏輯由底層實作。*/
cm_test_pwrkey_register();
#endif
線程建立
不能用這個us級延時,這個同級任務不會切換,要用osdelay那個
/*
* @description: 延時ms // ! 此函數無法延時20ms以下!!! 最好以20的整數倍
* @param {int} ms_delay
* @return {*}
*/
void usr_non_block_delay_ms(int ms_delay)
{
if(ms_delay>20)
{
osDelay(ms_delay/20);
}
else
{
osDelay(1);
}
}
/*
* @description: 延時ms // ! 同級線程不能使用ms切換!!!
* @param {int} us_delay
* @return {*}
*/
void usr_delay_ms(int ms_delay)
{
uint32_t sdelay = ms_delay*100*1000;
do
{
__NOP();
}
while(sdelay--);
}
/*
* @description: 延時us // ! 同級線程不能使用us切換!!!
* @param {int} us_delay
* @return {*}
*/
void usr_delay_us(int us_delay)
{
uint32_t sdelay = us_delay*100;
do
{
__NOP();
}
while(sdelay--);
}
序列槽列印初始化
直接調用demo程式 cm_demo_uart() 函數。 個人喜好:115200 TX:97 RX:98
GPIO輸出使用
#define DEVICE_NET_STA_GPIO18_PIN2 CM_IOMUX_PIN_2_FUNC_GPIO_18 // 網絡狀态燈
#define DEVICE_NET_STA_GPIO18 18 // 網絡狀态燈
#define DEVICE_MOD_STA_GPIO21_PIN79 CM_IOMUX_PIN_79_FUNC_GPIO_21 // 模式訓示燈
#define DEVICE_MOD_STA_GPIO21 21 // 模式訓示燈
/*
* @description: 初始化 網絡訓示燈 模式訓示燈
* @return {*}
*/
void led_tips_init(void)
{
cm_gpio_cfg_t cfg = {0};
cm_gpio_level_e level;
cm_iomux_set_pin_func(DEVICE_NET_STA_GPIO18_PIN2);//初始化之前一定要先設定引腳複用
cm_iomux_set_pin_func(DEVICE_MOD_STA_GPIO21_PIN79);//初始化之前一定要先設定引腳複
cfg.direction = CM_GPIO_DIRECTION_OUTPUT;
cfg.pull = CM_GPIO_PULL_DOWN;
cm_gpio_init(DEVICE_NET_STA_GPIO18, &cfg);
cm_gpio_init(DEVICE_MOD_STA_GPIO21, &cfg);
level = CM_GPIO_LEVEL_LOW;
cm_gpio_set_level(DEVICE_NET_STA_GPIO18, level);
cm_gpio_set_level(DEVICE_MOD_STA_GPIO21, level);
}
GPIO中斷的使用
#define DEVICE_KNOB_GPIO28_PIN100 CM_IOMUX_PIN_100_FUNC_GPIO_28 // 旋鈕
#define DEVICE_KNOB_GPIO28 28 // 旋鈕
/*
* @description: 中斷觸發
* @return {*}
*/
void gpio_irq_knob_callback(void)
{
logger_normal("gpio_irq_knob_callback \r\n");
}
/*
* @description: GPIO初始化
* @return {*}
*/
void gpio_irq_knob_init(void)
{
cm_gpio_cfg_t cfg = {0};
cm_gpio_level_e level;
cfg.direction = CM_GPIO_DIRECTION_INPUT;
cfg.pull = CM_GPIO_PULL_DOWN;
cm_iomux_set_pin_func(DEVICE_KNOB_GPIO28_PIN100);//初始化之前一定要先設定引腳複用
cm_gpio_init(DEVICE_KNOB_GPIO28, &cfg);
cm_gpio_interrupt_register(DEVICE_KNOB_GPIO28, gpio_irq_knob_callback);
cm_gpio_interrupt_enable(DEVICE_KNOB_GPIO28, CM_GPIO_IT_EDGE_FALLING);
}
log等級
#define LOG_LEVEL (1) // 1 debug 2 info 3 warn 4 error 5 fatal 6 close log
char g_log_level = LOG_LEVEL; // done 預設log等級
#define logger_normal(fmt, arg...) cm_demo_printf(fmt, ##arg)
#define logger_debug(fmt, arg...) do{if(g_log_level <= 1){cm_demo_printf("[DEBUG]:"fmt,##arg);}}while(0)
#define logger_info(fmt, arg...) do{if(g_log_level <= 2){cm_demo_printf("[INFO]:"fmt,##arg);}}while(0)
#define logger_warn(fmt, arg...) do{if(g_log_level <= 3){cm_demo_printf("[WARN]line %d in %s:"fmt,__LINE__,__FILE__,##arg);}}while(0)
#define logger_error(fmt, arg...) do{if(g_log_level <= 4){cm_demo_printf("[ERROR]line %d in %s:"fmt,__LINE__,__FILE__,##arg);}}while(0)
#define logger_fatal(fmt, arg...) do{if(g_log_level <= 5){cm_demo_printf("[FATAL]line %d in %s:"fmt,__LINE__,__FILE__,##arg);}}while(0)
ADC PWM 等其它功能
examples目錄下提供的示例進行改造,示例程式都是基于指令互動方式實作的。隻有找到其主要接口函數便可以使用
配置檔案
燒寫固件時候不會清空所有flash。 原因:flash是晶片自帶的,研發有個工具可以擦,但校準資料也會全部被擦了,就無法駐網了,是以擦不了
上一篇:ML302-OpenCpu開發-功能驗證
下一篇:ML302-OpenCpu開發-聯網功能