你好,
我已经写了一个代码样本P00, P01, P02 ADC值。
此代码由无编码的AT+TMRSTART=0,0,1触发
代码看起来像:
else if (user_compare_cmd(“TMRSTART”、3、3))
{
Uint8_t timer_id = ahtoi((char*)argument_array[0]);
Uint8_t index = ahtoi((char*)argument_array[1]);
times_seconds = ahtoi ((char *) argument_array [2]);
如果(指数= = 0)
codeless_env。咯[timer_id] = app_easy_timer (ahtoi ((char *) argument_array [2]), throw_command0);
Else if(index == 1)
codeless_env。咯[timer_id] = app_easy_timer (ahtoi ((char *) argument_array [2]), throw_command1);
其他的
user_reply (tempstr假);
如果(指数< 4)
user_reply (tempstr,真实);
/ /输入插脚
GPIO_ConfigurePin((GPIO_PORT)0, (GPIO_PIN)0, INPUT, PID_GPIO, false);
GPIO_ConfigurePin((GPIO_PORT)0, (GPIO_PIN)1, INPUT, PID_GPIO, false);
GPIO_ConfigurePin((GPIO_PORT)0, (GPIO_PIN)2, INPUT, PID_GPIO, false);
/ / ADC INIT
adc_init (GP_ADC_SE, 0, 0);
}
在回调代码中:
空白throw_command0 ()
{
codeless_env。suppress_response = true;
adc_enable_channel (0);
adc_get_sample ();
int length = (ADC_values_1) / (ADC_values_1[0]) / (ADC_values_1[0]) / (ADC_values_1[0]);
For (int I = 0;我<长度;我+ +){
adc_enable_channel (0);
adc_get_sample ();
ADC_values_1[我]= adc_get_sample ();
adc_enable_channel (1);
adc_get_sample ();
ADC_values_2[我]= adc_get_sample ();
adc_enable_channel (2);
adc_get_sample ();
ADC_values_3[我]= adc_get_sample ();
}
For (int I = 0;我<长度;我+ +){
arch_printf(“%,%,% \ r \ n”,ADC_values_1[我],ADC_values_2[我],ADC_values_3[我]);
}
codeless_env。咯[0]= app_easy_timer (times_seconds throw_command0);
codeless_env。suppress_response = false;
}
Timer在回调函数中重新启动自身。
它可以正常工作一段时间,然后程序崩溃。
数组是全局定义的:
int ADC_value_1 [30];
如果我调试它与IDE Keil运行它可能存储将满或adc停止工作?
你知道问题出在哪里吗?
Arch_printf()导致了这个问题!
致以最亲切的问候
哥特
嗨gert186,
我建议使用调试器来找出代码崩溃的位置。如果您能找到导致问题的代码行,我们应该能够提供进一步的帮助。
致以最亲切的问候
IM_Dialog
我使用调试器!但问题是,Uart2回调函数不再到达:
静态uart_callback(uint8_t res)
这个函数或多或少地删除缓冲区。
如果你在循环中调用arch_printf()。代码会杀死自己。我不知道为什么!
致以最亲切的问候
哥特
嗨,哥特,
我想知道你向UART发送了多少字节。显然,每10毫秒调用一次计时器函数。你正在接近57k6比特/秒的UART比特率吗?
如果你只发送一个字符作为实验,代码会运行吗?
/ MHv