更新:

1、热电偶 mv <--> temperature 转换;
2、优先级、堆栈、延时周期重置;
3、新增任务:任务堆栈监控;
This commit is contained in:
吴俊潮 2025-03-25 14:55:38 +08:00
parent d8e3433fd3
commit 1888b94feb
9 changed files with 20186 additions and 20261 deletions

View File

@ -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);

View File

@ -56,6 +56,7 @@ void screen_data_init(void)
//screen_setting
tab_dada_init();
LIGHT_OFF;
}

View File

@ -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;

View File

@ -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

View File

@ -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 */

View File

@ -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

View File

@ -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

View File

@ -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