c - 我的 FreeRTOS 实施未完成其任务
问题描述
我的项目有一个 Atmega328p 微控制器(与 Arduino Uno 相同)所以我实现了一个 Arduino Uno 移植的 FreeRTOS v10 项目。
一些规格: - F_CPU = 1 MHz - 在定时器 0 上运行 - 抢占模式 - 时间片 = 开启
我的两个简单任务表现得很奇怪。任务 1 是一个 LED 开关,任务 2 是一个三音梯
我最初的警报实现是一个alarm_on()
函数,它产生三种音调,_delay_ms()
中间有函数。但这并没有按预期工作,所以我尝试了这些vTaskDelayUntil()
功能。
我制作了运行以下代码片段的行为视频 https://www.youtube.com/watch?v=XnYaELsW1d0
所以 LED 闪烁是有效的,但这是一项非常简单且简短的任务。声音任务只产生 2 种音调,有时只产生一种。
我的任务安排:
xTaskCreate( TaskBlinkLED,
(const portCHAR *)"LED",
256,
NULL,
1,
NULL );
xTaskCreate( TaskSoundAlarm,
(const portCHAR *)"SOUND",
512,
NULL,
4,
NULL );
vTaskStartScheduler();
实际任务代码
static void TaskBlinkLED(void *pvParameters) // Main Green LED Flash
{
(void) pvParameters;
TickType_t xLastWakeTime;
const TickType_t xFrequency = 800;
/* The xLastWakeTime variable needs to be initialized with the current tick
count. Note that this is the only time we access this variable. From this
point on xLastWakeTime is managed automatically by the vTaskDelayUntil()
API function. */
xLastWakeTime = xTaskGetTickCount();
for(;;)
{
led_toggle();
vTaskDelayUntil( &xLastWakeTime, ( xFrequency / portTICK_PERIOD_MS ) );
}
}
static void TaskSoundAlarm(void *pvParameters)
{
(void) pvParameters;
TickType_t xLastWakeTime;
const TickType_t xFrequency = 3000;
xLastWakeTime = xTaskGetTickCount();
for(;;)
{
alarm_on(300);
vTaskDelayUntil( &xLastWakeTime, ( 200 / portTICK_PERIOD_MS ) );
alarm_on(400);
vTaskDelayUntil( &xLastWakeTime, ( 200 / portTICK_PERIOD_MS ) );
alarm_on(500);
vTaskDelayUntil( &xLastWakeTime, ( 200 / portTICK_PERIOD_MS ) );
alarm_off();
vTaskDelayUntil( &xLastWakeTime, ( xFrequency / portTICK_PERIOD_MS ) );
}
}
我的闹钟功能
void alarm_on(unsigned long hz)
{
ALARM_PORT_DDR |= (1<<ALARM_PIN);
t1_set_ctc_a(hz, timer_freq);
}
为什么它不通过产生 3 个音来完成这里的完整声音任务?
解决方案
推荐阅读
- c# - 如何通过 REST API 传输图像?(内有Core 2.0)
- java - Java 长字节长度
- java - java.lang.ClassCastException:实现 parcelable 时无法转换为 java.lang.String
- excel - COUNTIF 日期出现在同一周数和年份
- java - 检测动态 IP 地址变化
- swift - 迅速从阿拉伯语中删除变音符号
- sql - 在查询结果中只出现一次的行
- angular-material - 角反应形式 - 如何设置选择/下拉控件的默认值?
- ios - Git 说当我向项目中添加新文件时,我删除了 .pbxproj 文件中的一行
- c++ - stl 结构列表作为类成员