更新:
1、热电偶 mv <--> temperature 转换; 2、优先级、堆栈、延时周期重置; 3、新增任务:任务堆栈监控;
This commit is contained in:
parent
d8e3433fd3
commit
1888b94feb
|
@ -252,6 +252,12 @@ float32 mux2real(float32 mux_pv);
|
|||
//数据转换,real_value -> mux_signal.sv
|
||||
float32 real2mux(float32 real_value);
|
||||
|
||||
//数据转换,将输入热电偶电压值转换为实际温度值℃
|
||||
float32 tcmv2temp(SIG_FUNCTIONS_TYPE type, float32 mv);
|
||||
|
||||
//数据转换,将需要模拟的温度值℃转化为热电偶对应的mv
|
||||
float32 temp2tcmv(SIG_FUNCTIONS_TYPE type, float32 temp);
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ void screen_data_init(void)
|
|||
|
||||
//screen_setting
|
||||
tab_dada_init();
|
||||
LIGHT_OFF;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: wujunchao wujunchao@wuxismart.com
|
||||
* @Date: 2024-12-27 11:50:56
|
||||
* @LastEditors: wujunchao wujunchao@wuxismart.com
|
||||
* @LastEditTime: 2025-03-24 16:55:45
|
||||
* @LastEditTime: 2025-03-25 10:41:48
|
||||
* @FilePath: \signal_generator\App\APP_WU\Src\apps_gather.c
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
|
@ -399,7 +399,39 @@ void sig_sv_update(void)
|
|||
}
|
||||
}
|
||||
|
||||
//数据转换,将输入热电偶电压值转换为实际温度值℃
|
||||
float32 tcmv2temp(SIG_FUNCTIONS_TYPE type, float32 mv)
|
||||
{
|
||||
float32 result_temp = 0;
|
||||
uint8_t typ = 0, i = 0;
|
||||
typ = (uint8_t)type;
|
||||
typ -= 5; //[5,12]->[0,7]
|
||||
|
||||
float32 mv_left = 0, mv_right = 0;
|
||||
float32 temp_left = 0, temp_right = 0;
|
||||
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
if( ( TC_TABLE_MV[typ][i] <= mv )&&( mv < TC_TABLE_MV[typ][i + 1] ) )
|
||||
{
|
||||
mv_left = TC_TABLE_MV[typ][i];
|
||||
mv_right = TC_TABLE_MV[typ][i + 1];
|
||||
temp_left = TC_TABLE_TEMP[typ][i];
|
||||
temp_right = TC_TABLE_TEMP[typ][i + 1];
|
||||
|
||||
result_temp = temp_left + ( temp_right - temp_left )*\
|
||||
( mv - mv_left )/( mv_right - mv_left);
|
||||
|
||||
return result_temp;
|
||||
}
|
||||
}
|
||||
|
||||
//ERROR
|
||||
return -999;
|
||||
}
|
||||
|
||||
//数据转换,mux_signal.pv -> real_value
|
||||
//float32 m2r_test_in = 0, m2r_test_out = 0;
|
||||
float32 mux2real(float32 mux_pv)
|
||||
{
|
||||
float32 result = 0;
|
||||
|
@ -433,10 +465,10 @@ float32 mux2real(float32 mux_pv)
|
|||
{
|
||||
switch (type)
|
||||
{
|
||||
//[-2.5, 2.5V] -> [-2500mv, 2500mv]
|
||||
// mV 输入已处理,无需乘以1000
|
||||
case VOLTAGE_MV:
|
||||
{
|
||||
result = mux_pv * 1000;
|
||||
result = mux_pv;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -510,29 +542,8 @@ float32 mux2real(float32 mux_pv)
|
|||
//热电偶
|
||||
case SIG_TC:
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TC_K:
|
||||
{
|
||||
result = mux_pv;
|
||||
}
|
||||
break;
|
||||
|
||||
case TC_N:
|
||||
{
|
||||
result = mux_pv;
|
||||
}
|
||||
break;
|
||||
|
||||
case TC_S:
|
||||
{
|
||||
result = mux_pv;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
result = tcmv2temp(type, mux_pv);
|
||||
//m2r_test_out = tcmv2temp(type, m2r_test_in);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -560,7 +571,40 @@ float32 mux2real(float32 mux_pv)
|
|||
return result;
|
||||
}
|
||||
|
||||
|
||||
//数据转换,将需要模拟的温度值℃转化为热电偶对应的mv
|
||||
float32 temp2tcmv(SIG_FUNCTIONS_TYPE type, float32 temp)
|
||||
{
|
||||
float32 result_mv = 0;
|
||||
uint8_t typ = 0, i = 0;
|
||||
typ = (uint8_t)type;
|
||||
typ -= 5; //[5,12]->[0,7]
|
||||
|
||||
float32 mv_left = 0, mv_right = 0;
|
||||
float32 temp_left = 0, temp_right = 0;
|
||||
|
||||
for(i = 0; i < 10; i++)
|
||||
{
|
||||
if( ( TC_TABLE_TEMP[typ][i] <= temp )&&( temp < TC_TABLE_TEMP[typ][i + 1] ) )
|
||||
{
|
||||
mv_left = TC_TABLE_MV[typ][i];
|
||||
mv_right = TC_TABLE_MV[typ][i + 1];
|
||||
temp_left = TC_TABLE_TEMP[typ][i];
|
||||
temp_right = TC_TABLE_TEMP[typ][i + 1];
|
||||
|
||||
result_mv = mv_left + ( mv_right - mv_left )*\
|
||||
( temp - temp_left )/( temp_right - temp_left);
|
||||
|
||||
return result_mv;
|
||||
}
|
||||
}
|
||||
|
||||
//ERROR
|
||||
return -999;
|
||||
}
|
||||
|
||||
//数据转换,real_value -> mux_signal.sv
|
||||
//float32 r2m_test_in = 0, r2m_test_out = 0;
|
||||
float32 real2mux(float32 real_value)
|
||||
{
|
||||
float32 result = 0;
|
||||
|
@ -672,29 +716,8 @@ float32 real2mux(float32 real_value)
|
|||
//热电偶
|
||||
case SIG_TC:
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TC_K:
|
||||
{
|
||||
result = real_value;
|
||||
}
|
||||
break;
|
||||
|
||||
case TC_N:
|
||||
{
|
||||
result = real_value;
|
||||
}
|
||||
break;
|
||||
|
||||
case TC_S:
|
||||
{
|
||||
result = real_value;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
result = temp2tcmv(type, real_value);
|
||||
//r2m_test_out = temp2tcmv(type, r2m_test_in);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -66,6 +66,8 @@
|
|||
#define configMINIMAL_STACK_SIZE ((uint16_t)128)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)17360)
|
||||
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||
#define configUSE_TRACE_FACILITY 1
|
||||
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 8
|
||||
|
|
|
@ -54,8 +54,7 @@ osThreadId task_bleHandle;
|
|||
osThreadId task_rs485Handle;
|
||||
osThreadId task_mux_analogHandle;
|
||||
osThreadId task_menuHandle;
|
||||
osMessageQId myQueue01Handle;
|
||||
osMutexId mutex_lvglHandle;
|
||||
osThreadId task_monitorHandle;
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN FunctionPrototypes */
|
||||
|
@ -69,6 +68,7 @@ void start_task_ble(void const * argument);
|
|||
void start_rs485(void const * argument);
|
||||
void start_mux_analog(void const * argument);
|
||||
void start_menu(void const * argument);
|
||||
void start_task_monitor(void const * argument);
|
||||
|
||||
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
|
||||
|
||||
|
@ -97,10 +97,6 @@ void MX_FREERTOS_Init(void) {
|
|||
/* USER CODE BEGIN Init */
|
||||
|
||||
/* USER CODE END Init */
|
||||
/* Create the mutex(es) */
|
||||
/* definition and creation of mutex_lvgl */
|
||||
osMutexDef(mutex_lvgl);
|
||||
mutex_lvglHandle = osMutexCreate(osMutex(mutex_lvgl));
|
||||
|
||||
/* USER CODE BEGIN RTOS_MUTEX */
|
||||
/* add mutexes, ... */
|
||||
|
@ -114,44 +110,43 @@ void MX_FREERTOS_Init(void) {
|
|||
/* start timers, add new ones, ... */
|
||||
/* USER CODE END RTOS_TIMERS */
|
||||
|
||||
/* Create the queue(s) */
|
||||
/* definition and creation of myQueue01 */
|
||||
osMessageQDef(myQueue01, 16, uint16_t);
|
||||
myQueue01Handle = osMessageCreate(osMessageQ(myQueue01), NULL);
|
||||
|
||||
/* USER CODE BEGIN RTOS_QUEUES */
|
||||
/* add queues, ... */
|
||||
/* USER CODE END RTOS_QUEUES */
|
||||
|
||||
/* Create the thread(s) */
|
||||
/* definition and creation of defaultTask */
|
||||
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
|
||||
osThreadDef(defaultTask, StartDefaultTask, osPriorityIdle, 0, 128);
|
||||
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
|
||||
|
||||
/* definition and creation of task_lcd */
|
||||
osThreadDef(task_lcd, start_task_lcd, osPriorityBelowNormal, 0, 1024);
|
||||
osThreadDef(task_lcd, start_task_lcd, osPriorityAboveNormal, 0, 768);
|
||||
task_lcdHandle = osThreadCreate(osThread(task_lcd), NULL);
|
||||
|
||||
/* definition and creation of task_hart */
|
||||
osThreadDef(task_hart, start_task_hart, osPriorityNormal, 0, 128);
|
||||
osThreadDef(task_hart, start_task_hart, osPriorityHigh, 0, 256);
|
||||
task_hartHandle = osThreadCreate(osThread(task_hart), NULL);
|
||||
|
||||
/* definition and creation of task_ble */
|
||||
osThreadDef(task_ble, start_task_ble, osPriorityBelowNormal, 0, 128);
|
||||
osThreadDef(task_ble, start_task_ble, osPriorityBelowNormal, 0, 256);
|
||||
task_bleHandle = osThreadCreate(osThread(task_ble), NULL);
|
||||
|
||||
/* definition and creation of task_rs485 */
|
||||
osThreadDef(task_rs485, start_rs485, osPriorityNormal, 0, 128);
|
||||
osThreadDef(task_rs485, start_rs485, osPriorityHigh, 0, 256);
|
||||
task_rs485Handle = osThreadCreate(osThread(task_rs485), NULL);
|
||||
|
||||
/* definition and creation of task_mux_analog */
|
||||
osThreadDef(task_mux_analog, start_mux_analog, osPriorityAboveNormal, 0, 128);
|
||||
osThreadDef(task_mux_analog, start_mux_analog, osPriorityRealtime, 0, 128);
|
||||
task_mux_analogHandle = osThreadCreate(osThread(task_mux_analog), NULL);
|
||||
|
||||
/* definition and creation of task_menu */
|
||||
osThreadDef(task_menu, start_menu, osPriorityIdle, 0, 1024);
|
||||
osThreadDef(task_menu, start_menu, osPriorityNormal, 0, 512);
|
||||
task_menuHandle = osThreadCreate(osThread(task_menu), NULL);
|
||||
|
||||
/* definition and creation of task_monitor */
|
||||
osThreadDef(task_monitor, start_task_monitor, osPriorityIdle, 0, 128);
|
||||
task_monitorHandle = osThreadCreate(osThread(task_monitor), NULL);
|
||||
|
||||
/* USER CODE BEGIN RTOS_THREADS */
|
||||
/* add threads, ... */
|
||||
/* USER CODE END RTOS_THREADS */
|
||||
|
@ -171,9 +166,6 @@ void StartDefaultTask(void const * argument)
|
|||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
//LIGHT_PWR(OFF);
|
||||
// pwr_cosume(kp_flag, 20000);
|
||||
//tm1650_read_key(&hi2c1, &kp_flag, COMMAND_READ_KEY_DATA, &key);
|
||||
osDelay(500);
|
||||
}
|
||||
/* USER CODE END StartDefaultTask */
|
||||
|
@ -189,24 +181,10 @@ void StartDefaultTask(void const * argument)
|
|||
void start_task_lcd(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_task_lcd */
|
||||
osStatus result;
|
||||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
//menu_test4();
|
||||
if(result == osMutexWait(mutex_lvglHandle,10))
|
||||
{
|
||||
lv_timer_handler(); //LVGL刷新任务
|
||||
osMutexRelease(mutex_lvglHandle);
|
||||
}
|
||||
|
||||
if(breathe_cnt * LVGL_BREATHE_INTERVAL >= 1000)
|
||||
{
|
||||
breathe_cnt = 0;
|
||||
//LED_TOG;
|
||||
}
|
||||
|
||||
breathe_cnt++;
|
||||
lv_timer_handler(); //LVGL刷新任务
|
||||
osDelay(LVGL_BREATHE_INTERVAL);
|
||||
}
|
||||
/* USER CODE END start_task_lcd */
|
||||
|
@ -225,7 +203,7 @@ void start_task_hart(void const * argument)
|
|||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
hart_communicate(&scom1_hart);
|
||||
//hart_communicate(&scom1_hart);
|
||||
tm1650_read_key(&hi2c1, &kp_flag, COMMAND_READ_KEY_DATA, &key);
|
||||
|
||||
osDelay(10);
|
||||
|
@ -246,10 +224,10 @@ void start_task_ble(void const * argument)
|
|||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
strcpy((char *)(scom6_ble.tx_buff), "hellow I am ble.\r\n");
|
||||
ble_send(&huart6, scom6_ble.tx_buff);
|
||||
// strcpy((char *)(scom6_ble.tx_buff), "hellow I am ble.\r\n");
|
||||
// ble_send(&huart6, scom6_ble.tx_buff);
|
||||
|
||||
osDelay(1000);
|
||||
osDelay(100);
|
||||
}
|
||||
/* USER CODE END start_task_ble */
|
||||
}
|
||||
|
@ -264,12 +242,11 @@ void start_task_ble(void const * argument)
|
|||
void start_rs485(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_rs485 */
|
||||
//RS485_RW(RS485_RD); // rs485从机
|
||||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
parse_scom_485(&scom2_rs485);
|
||||
osDelay(1);
|
||||
//parse_scom_485(&scom2_rs485);
|
||||
osDelay(10);
|
||||
}
|
||||
/* USER CODE END start_rs485 */
|
||||
}
|
||||
|
@ -284,12 +261,10 @@ void start_rs485(void const * argument)
|
|||
void start_mux_analog(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_mux_analog */
|
||||
// rn7302_Init();
|
||||
SIG24130_Init();
|
||||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
// get_rn7302_ch_value();
|
||||
mux_signal_switch(&mux_signal);
|
||||
osDelay(50);
|
||||
}
|
||||
|
@ -311,11 +286,35 @@ void start_menu(void const * argument)
|
|||
for(;;)
|
||||
{
|
||||
screen_run();
|
||||
osDelay(500);
|
||||
osDelay(200);
|
||||
}
|
||||
/* USER CODE END start_menu */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN Header_start_task_monitor */
|
||||
/**
|
||||
* @brief Function implementing the task_monitor thread.
|
||||
* @param argument: Not used
|
||||
* @retval None
|
||||
*/
|
||||
char task_status[255];
|
||||
/* USER CODE END Header_start_task_monitor */
|
||||
void start_task_monitor(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN start_task_monitor */
|
||||
/* Infinite loop */
|
||||
for(;;)
|
||||
{
|
||||
vTaskList(task_status);
|
||||
|
||||
//串口打印当前各个任务的详细信息
|
||||
//任务名 状态 优先级 空闲栈 任务号
|
||||
HAL_UART_Transmit(&huart3, (uint8_t *)task_status, 255, 0xFFFF);
|
||||
osDelay(3000);
|
||||
}
|
||||
/* USER CODE END start_task_monitor */
|
||||
}
|
||||
|
||||
/* Private application code --------------------------------------------------*/
|
||||
/* USER CODE BEGIN Application */
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ void MX_SPI1_Init(void)
|
|||
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
|
||||
hspi1.Init.NSS = SPI_NSS_SOFT;
|
||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
|
||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
|
||||
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -29,7 +29,7 @@
|
|||
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||
; </h>
|
||||
|
||||
Stack_Size EQU 0x3000
|
||||
Stack_Size EQU 0x2000
|
||||
|
||||
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||
Stack_Mem SPACE Stack_Size
|
||||
|
|
|
@ -23,13 +23,14 @@ Dma.ADC1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlign
|
|||
Dma.Request0=ADC1
|
||||
Dma.RequestsNb=1
|
||||
FREERTOS.FootprintOK=true
|
||||
FREERTOS.IPParameters=Tasks01,FootprintOK,configUSE_TICKLESS_IDLE,configGENERATE_RUN_TIME_STATS,Queues01,configTOTAL_HEAP_SIZE,Mutexes01
|
||||
FREERTOS.Mutexes01=mutex_lvgl,Dynamic,NULL,Available
|
||||
FREERTOS.Queues01=myQueue01,16,uint16_t,0,Dynamic,NULL,NULL
|
||||
FREERTOS.Tasks01=defaultTask,0,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;task_lcd,-1,1024,start_task_lcd,Default,NULL,Dynamic,NULL,NULL;task_hart,0,128,start_task_hart,Default,NULL,Dynamic,NULL,NULL;task_ble,-1,128,start_task_ble,Default,NULL,Dynamic,NULL,NULL;task_rs485,0,128,start_rs485,Default,NULL,Dynamic,NULL,NULL;task_mux_analog,1,128,start_mux_analog,Default,NULL,Dynamic,NULL,NULL;task_menu,-3,1024,start_menu,Default,NULL,Dynamic,NULL,NULL
|
||||
FREERTOS.IPParameters=Tasks01,FootprintOK,configUSE_TICKLESS_IDLE,configGENERATE_RUN_TIME_STATS,configTOTAL_HEAP_SIZE,configUSE_STATS_FORMATTING_FUNCTIONS,configUSE_TRACE_FACILITY,configUSE_IDLE_HOOK
|
||||
FREERTOS.Tasks01=defaultTask,-3,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;task_lcd,1,768,start_task_lcd,Default,NULL,Dynamic,NULL,NULL;task_hart,2,256,start_task_hart,Default,NULL,Dynamic,NULL,NULL;task_ble,-1,256,start_task_ble,Default,NULL,Dynamic,NULL,NULL;task_rs485,2,256,start_rs485,Default,NULL,Dynamic,NULL,NULL;task_mux_analog,3,128,start_mux_analog,Default,NULL,Dynamic,NULL,NULL;task_menu,0,512,start_menu,Default,NULL,Dynamic,NULL,NULL;task_monitor,-3,128,start_task_monitor,Default,NULL,Dynamic,NULL,NULL
|
||||
FREERTOS.configGENERATE_RUN_TIME_STATS=0
|
||||
FREERTOS.configTOTAL_HEAP_SIZE=17360
|
||||
FREERTOS.configUSE_IDLE_HOOK=0
|
||||
FREERTOS.configUSE_STATS_FORMATTING_FUNCTIONS=1
|
||||
FREERTOS.configUSE_TICKLESS_IDLE=0
|
||||
FREERTOS.configUSE_TRACE_FACILITY=1
|
||||
File.Version=6
|
||||
GPIO.groupedBy=Group By Peripherals
|
||||
I2C1.ClockSpeed=50000
|
||||
|
@ -509,7 +510,7 @@ ProjectManager.ProjectFileName=signal_generator.ioc
|
|||
ProjectManager.ProjectName=signal_generator
|
||||
ProjectManager.ProjectStructure=
|
||||
ProjectManager.RegisterCallBack=
|
||||
ProjectManager.StackSize=0x3000
|
||||
ProjectManager.StackSize=0x2000
|
||||
ProjectManager.TargetToolchain=MDK-ARM V5.32
|
||||
ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UAScriptAfterPath=
|
||||
|
@ -558,9 +559,9 @@ SH.GPXTI1.0=GPIO_EXTI1
|
|||
SH.GPXTI1.ConfNb=1
|
||||
SH.S_TIM3_CH4.0=TIM3_CH4,Input_Capture4_from_TI4
|
||||
SH.S_TIM3_CH4.ConfNb=1
|
||||
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_8
|
||||
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256
|
||||
SPI1.CLKPhase=SPI_PHASE_2EDGE
|
||||
SPI1.CalculateBaudRate=5.184 MBits/s
|
||||
SPI1.CalculateBaudRate=162.0 KBits/s
|
||||
SPI1.Direction=SPI_DIRECTION_2LINES
|
||||
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,CLKPhase,BaudRatePrescaler
|
||||
SPI1.Mode=SPI_MODE_MASTER
|
||||
|
|
Loading…
Reference in New Issue