用的是CH573F,PA4 PA5接了2个LED我设想的是上电两个LED灯亮,1s后都熄灭,接着其中一个LED闪烁。但没看的啥效果,灯都没点亮,编译通过。
程序参考:https://www.cnblogs.com/iot-fan/p/13460082.html
#include "CH57x_common.h"
#include"tmos_demo_task.h"
/*********************************************************************
* GLOBAL TYPEDEFS
*/
__attribute__((aligned(4))) u32 MEM_BUF[BLE_MEMHEAP_SIZE/4];
__attribute__((section(".highcode")))
void Main_Circulation()
{
while(1){
TMOS_SystemProcess( );
}
}
int main()
{
SetSysClock( CLK_SOURCE_PLL_60MHz );
GPIOA_ModeCfg(GPIO_Pin_4,GPIO_ModeOut_PP_5mA);
GPIOA_ModeCfg(GPIO_Pin_5,GPIO_ModeOut_PP_5mA);
GPIOA_SetBits(GPIO_Pin_4);
GPIOA_SetBits(GPIO_Pin_5);
demo_task_init();
Main_Circulation();
}
#include "CH57x_common.h"
#include "tmos_demo_task.h"
//存储 当前task id 的全局变量
tmosTaskID demo_task_id = INVALID_TASK_ID;
//系统消息处理的函数
//task的event处理回调函数,需要在注册task时候,传进去
static uint16_t demo_task_process_event( uint8_t task_id, uint16_t events ) {
if ( events & SYS_EVENT_MSG ) {
uint8_t *pMsg;
if ( (pMsg = tmos_msg_receive( demo_task_id )) != NULL ) {
tmos_msg_deallocate( pMsg );
}
// return unprocessed events
return (events ^ SYS_EVENT_MSG);
}
//event 处理
if(events & DEMO_TASK_TMOS_EVT_TEST_1) {
GPIOA_ResetBits(GPIO_Pin_4);
GPIOA_ResetBits(GPIO_Pin_5);
return (events ^ DEMO_TASK_TMOS_EVT_TEST_1);
}
//event 处理
if(events & DEMO_TASK_TMOS_EVT_TEST_2) {
tmos_start_task(demo_task_id,DEMO_TASK_TMOS_EVT_TEST_3,1600);
GPIOA_SetBits(GPIO_Pin_4);
GPIOA_SetBits(GPIO_Pin_5);
return (events ^ DEMO_TASK_TMOS_EVT_TEST_2);
}
//event 处理
if(events & DEMO_TASK_TMOS_EVT_TEST_3) {
tmos_start_task(demo_task_id,DEMO_TASK_TMOS_EVT_TEST_3,800);
GPIOA_InverseBits( GPIO_Pin_4 );
return (events ^ DEMO_TASK_TMOS_EVT_TEST_3);
}
// Discard unknown events
return 0;
}
uint8 tmos_demo_task_send_msg( uint8_t task_id,uint8_t *data ,uint16_t length ) {
uint8_t *p_data;
if ( task_id != TASK_NO_TASK ) {
// Send the address to the task
p_data = tmos_msg_allocate(length);
if ( p_data ) {
tmos_memcpy(p_data,data,length);
tmos_msg_send( task_id, p_data );
return ( SUCCESS );
}
}
return ( FAILURE );
}
//初始化task
//包括注册函数,可以注册后去开启event
void demo_task_init( void ) {
//注册task id,同事把该task的event处理函数传进去
demo_task_id = TMOS_ProcessEventRegister( demo_task_process_event );
//立即开始一个event
tmos_set_event(demo_task_id,DEMO_TASK_TMOS_EVT_TEST_1);
//开始一个定时event,1s后产生,当前语句只会产生一次event
//可以在event产生后去开启event,可以是别的task的,也可以是当前task的event
tmos_start_task(demo_task_id,DEMO_TASK_TMOS_EVT_TEST_2,1600);
}
CH573F-TMOS-Demo.zip
(631.66 KB)
|