- 打卡等级:以坛为家II
- 打卡总天数:434
- 最近打卡:2025-05-03 16:06:50
荣誉版主
- 积分
- 4271
|
发表于 2024-4-17 19:48:29
|
显示全部楼层
本帖最后由 CosyOS 于 2024-4-18 08:24 编辑
/***********初始化钩子***************************/
void init_hook(void)
{
GPIO_Init();
ADC_config();
Uart1Init();
PCA_config();
userled=0; // 这个灯在哪点亮都可以
}
/***********启动钩子***************************/
void start_hook(void)
{
userled=0; // 这个灯在哪点亮都可以
uStartTask(Modbus_Parsing_Task, 0); // 启动Modbus通信任务
uStartTask(Modbus_Timeout_Dispose, 0); // 启动Modbus超时检测任务
uStartTask(EEPROM_Read_Write, 0); // 启动EEPROM 数据保存任务
uStartTask(Humidity_Drive_1KHZ, 0); // 启动温度湿度采集任务
}
/***********Modbus通信解析***************************/
uCreateTask(Modbus_Parsing_Task, pri, stacksize, 0, 0)
{
u8 i;
for(i=0;i<64;i++)
{
modbus_reg=0;
}
while(1)
{
Modbus1_Parsing();
os_wait(K_TMO,10,0);//moudbus轮询时间要短
}
uEndTasking;
}
/***********Modbus通信超时处理***************************/
uCreateTask(Modbus_Timeout_Dispose, pri, stacksize, 0, 0)
{
while(1)
{
Modbus1_TimeOut_Check();
os_wait(K_TMO,2,0);
}
uEndTasking;
}
/***********站号设定并保存至EEPROM***************************/
uCreateTask(EEPROM_Read_Write, pri, stacksize, 0, 0)
{
u8 EEPROM_Temp[1];
EEPROM_read_n(0,EEPROM_Temp,1);//0x0000扇区,1个字节
if(EEPROM_Temp[0]<255)
{
SL_ADDR=EEPROM_Temp[0];
}
else
{
SL_ADDR=4;
}
while(1)
{
if(modbus_reg[0]==1)
{
EEPROM_SectorErase(0);
os_wait(K_TMO,2,0);
EEPROM_Temp[0]=modbus_reg[1];
EEPROM_write_n(0,EEPROM_Temp,1);
modbus_reg[1]=0;
modbus_reg[0]=0;
}
else if(modbus_reg[0]==2)
{
EEPROM_read_n(0,EEPROM_Temp,1);
SL_ADDR=EEPROM_Temp[0];
modbus_reg[0]=0;
}
modbus_reg[4]=SL_ADDR;
os_wait(K_TMO,250,0);
os_wait(K_TMO,250,0);
}
uEndTasking;
}
/***********温湿度采集计算**************************/
uCreateTask(Humidity_Drive_1KHZ, pri, stacksize, 0, 0)
{
int *BGA;
while(1)
{
BGA= (int idata *)0xef;
Vbga=(float)(*BGA);
mcu_vcc=1024.0*Vbga/bga_value;
RH_value=(u32)(10*mcu_vcc/CH_voltage-10);
res2humidity(RH_value);
modbus_reg[5]=(u16)mcu_vcc;//基准电压
modbus_reg[6]=(u16)CH_voltage;//
modbus_reg[7]=HUMI_vule/10;//湿度
os_wait(K_TMO,250,0);
os_wait(K_TMO,250,0);
userled=~userled;
}
uEndTasking;
}
这样就可以了,我只是给你调整了一下框架,让你能把握流程。
其实,CosyOS创建任务是简单的,不要把他想复杂了,不要拘泥于固有思维。
然后就是系统配置、mcu配置,等相关配置了。
我再总结一下,CosyOS开发流程:
1、两个钩子 + 创建任务(uCreateTask、dCreateTask);
2、配置工程:系统配置 + MCU配置 + 编译器配置 + 启动文件配置 + ......
如果是不同MCU的切换:
首先要换一个标准头文件;
系统配置中要重新配置MCU内核和标准头文件;
相应的MCU配置文件必然需要配置;
启动钩子和所有任务基本是不需要动的;
初始化钩子一般也不需要动,取决于你;
其实并不复杂,做的都是该做的事。
|
|