本来开发环境搭建的很顺利,也就没把程序下载的问题看的有多重,没想到小河沟还真翻船了。为了测试GPIO口的使用,先打算以PA0来控制一个外部的LED模块。 于是用线程配置工具按图1进行了配置,然后点击“生成代码”予以保存。
图1 线程配置
再打开例程,并向文件main.c中添加线程0的程序,其内容如下:
void thread0_main(void)
{
INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN_7_0),GPIO_SET_ENABLE);
GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,(GPIO_PIN0));
while(1){
GPIO_SET_OUTPUT_PIN_INV(GPIOA_BASE_ADDR,(GPIO_PIN0|GPIO_PIN8));
for (u32 var = 0; var < 500000; ++var) {
NOP();
}
}
thread_end();
}
经编译处理,一切也都正常。
随后是使用开发板程序下载软件来下载程序,其结果如图2所示,似乎情况也正常,但是就是没有LED灯闪烁的效果。
图2 执行效果
最后是以图3的连接方式实现了程序的下载,并见到了预期的显示效果。
图3 执行效果
此时的下载界面如图4所示,通过对比可以发现在不能实现程序下载的情况下,出现了一次“设备已断开”的提示。另外,在完成程序下载时,出现的是2次“找到可操作设备:…”,而对于异常的情况,则只出现了一次“找到可操作设备:…”。
图4 完成下载
另外需要说明的是,使用“单次运行”来下载,只是将程序下载到了内存,尽管可以运行,但一旦断电就无效了。而使用“烧录固件”,则是将程序烧录到程序存储器,即使是断电也不会影响到程序的执行。
图5 烧录固件
如今终于可以进行程序下载的测试了,为此后续的测评就有了较好的保障,如果这道坎不好解决的话,还真让人感到麻烦。
后面打算先体验一下线程间的数据共享,这才是多线程应用中的一个关键问题。
1
|
|
|
|