基于TI-RTOS的CC3200调试过程记录(2)

2018-11-29 16:42

4.文件系统的文件在UserFiles添加。

2.发现仿真情况下,程序运行正常,当下载到flash后程序有时不能正常启动。

2.1当只下载.bin文件时,程序有时正常运行,有时不能启动,复位多次(两次),程序有时能重启2.2当其他文件下载完毕,下载sever包时,提示无法下载。(表明flash空间不够)2.3当取消部分网页文件,再下载服务器包,程序正常下载。

2.4

早晨开电脑时,经常提示M3的配置无效,重启电脑几次有时好用。按开发板复位键,直到CPU运行起来后,再重新仿真,OK。

怀疑:1.

8mflash的空间不够

2.

flash硬件可能有些问题,导致bootloader没有完全加载程序

7.1将开发板的仿真器的信号引出,接到新做的板上,可以正常下载。

(uniflash软件在下载时,会等待收到芯片的应答信号后,才继续下载。以前之所以能偶尔下载成功,是因为反复折腾,可能将这个应答信号置到所需的位。换成StellarisIn-CircuitDebugInterface的仿真器,问题解决。

注意此时新做板子的5V电源是从仿真器板上取得的,如果是从其他5v电源上取得,也无法下载。----电源一定要从仿真板上取得,切记,切记)

7.2换成2MB的flash

换成2MB的flash,jquery-ui.js反复试验多次文件也始终无法下载。Format中,将Capacity设置为2M,格式化后再重新下载,文件下载成功。说明:当更换flash后,capacity中也需设置容量,否则还是当1m的容量在用。

要使能调试界面需开启UIA功能:uia:loggingSetup中设置开启

需开启Timerstamp功能

XDCtools/Diagnostics/Timestamp中设置开启

debug运行后点击RTOSanalyese

注:系统tick与uia中时标

分别是两个定时器

更改.xcf配置文件后,最好makeclean下,再重新编译。

用CLOCK_CC3200配置文件,图形界面好用。gpiointerrupt_CC3200UIA功能不能用。

6图形化调试界面设置:

(15.0918遇到UIA调试的相关问题

发现rtsc_practise1----3图形界面功能都不能用,

新建一工程(TI-RTOSExamples--InstrumentationExamples)的TI-RTOS空工程还是不能支持UIA功能再新建一工程,TI-RTOS的配置文件与主程序分离的工程,还是不能支持UIA功能。

重启电脑后,UIA功能好用,可加载UIA的配置文件。怀疑,是仿真器的配置相关,在电脑重启后,好用了。

)

使能定时器功能:

(定时器选用定时器3设定为1000个tick=1000x1ms=1s)XDCtools/SYSBIOS/Scheduling/Timer

注:定时器0、1分别用于系统节拍和UIA时标,只能从ID号为2、3中选择定时器注意定时器的单位为us(1000periodinmicrosecs===1000us)

模块化编程注意:

4.1

Clock_Handleclk1,clk2;

Event_Handleevt;Mailbox_Handlembx;Semaphore_Handlesem;邮箱

信号量事件clk等

要想在各个文件中公用变量,需在配置文件中定义。

4.2对于驱动类型的结构体指针:

注:内核中uartspiii2c等关键字都被定义,在定义驱动的Handle指针时注意不要与这些关键字重复,否则有错误警告信息。例:bios的头文件中已定义constti_sysbios_knl_Task_Handleuart驱动类型的结构体例:UART_Handleuart0;

SPI_Handlespi0等,

7如果另一个任务也需调用Handle变量,在任务文件中定义全局变量;在头文件中声明为extern型。另一任务文件引用,需包含此头文件。

增加debug调试功能:

drvier中增加uart_monitor功能,系统会自动创建一个uart_monitor的任务

选择相应的工程,在debugconfiguration中loadoption选项中选择loadsymbolonly。CC3200的配置文件中不支持uart_monitor监视功能。

TM4C系列的DSP支持debug功能

API函数查看

CCS文档中,HELP->helpcontents-》SYS/BIOS

>APIreference》ti.sysbios.knl

c2000系列查看BIOS下的中断号:

InCCS,selectHelp?HelpContentsandthenclickonthefollowing(listwasedited):

----APIreference>>>ti.sysbosfamily.C28>>>>hwi

使能空闲任务

空闲任务的优先级为0,只能有一个死循环的空闲任务,且不能加task_sleep();配置文件中加入varIdle=xdc.useModule('ti.sysbios.knl.Idle');在可视化配置文件中共7个空闲任务,起好任务函数名即可用。

8queue_get/put

在多任务中传输数据。

例:

任务1中3次Queue_put(Handle_queue,&t_QueueMes1.elem)后发送一个Semaphore_post(sem_queuen);;

任务2中Semaphore_pend(sem_queuen,BIOS_WAIT_FOREVER)后,取出数据应调用3次pt_QueueMes1=(pt_QueueMes)Queue_get(Handle_queue);否则数据指针会便移。

参考workspace_v6_1的RtosQueuePractise的例程(注:配置文件中加入varQueue=xdc.useModule('ti.sysbios.knl.Queue');)

死锁(deadlock)的发生及程序中避免死锁。

两个线程抢占两个全局变量。

task1

task2

Sem_pend(res_1);Sem_pend(res_2);//useresource1//useresource2

STUCK?

STUCK?

Sem_pend(res_2);Sem_pend(res_1);//useresource2//useresource1Sem_post(res_1);Sem_post(res_2);Sem_post(res_2);

Sem_post(res_1);

当任务一用资源1时,优先级更高的task2抢占task1,运行到Sem_pend(res_1);

阻赛,此时task1没有释放res_1信号量,两个任务互相卡死。

如何在程序中避免死锁的发生。(这种情况发生死锁的概率要比上中情况低很多。但也会发生死锁现象)

task1task21.Sem_pend(res_1);Sem_pend(res_2);2.//useresource1//useresource23.Sem_post(res_1);Sem_post(res_2);4.Sem_pend(res_2);Sem_pend(res_1);5.//useresource2//useresource16.Sem_post(res_2);Sem_post(res_1);

当task1任务运行到1时,更高优先级抢占task1,当运行到4时,此时信号量res_1没有释放,任务出现死锁现象。

当两个线程只抢占一个全局变量时,即一个线程中信号量的个数为1,这种情况不会发生死锁。当一个线程中信号量个数>=2,时,一定要注意死锁现象。

9当出现这种问题,如何解决???????

1.一种方法用pend超时,当超时时间到任务自然会往下运行,不会出现死锁现象。(用这种方法)2.用互斥锁。

互斥锁:高优先级抢占后,当要修改资源时,阻塞。待此低优先级任务完成后,再回到阻塞任务。(互斥锁开解锁只能在同一进程)

互斥锁的用法:

#includeGateMutex_HandlegateUSBWait;

gateUSBWait=GateMutex_create(NULL,&eb);

if(gateUSBWait==NULL){

System_abort(\notcreateUSBWaitgate\}

key=GateMutex_enter(gateUSBWait);..................资源

GateMutex_leave(gateUSBWait,key);互斥的本质作用:

高优先级的任务需等到互斥任务完成后方才能运行。

#includeGateMutex_HandlegateUSBWait;intkey;

intresource=100;

VoidResource2TaskFxn(UArgarg0,UArgarg1){

gateUSBWait=GateMutex_create(NULL,0);if(gateUSBWait==NULL){

System_printf(\notcreateUSBWaitgate\);System_flush();}while(1){

key=GateMutex_enter(gateUSBWait);resource--;

System_printf(\对资源进行减法操作,datais%d\\n\,resource);System_printf(\is%d\\n\,key);System_flush();

GateMutex_leave(gateUSBWait,key);

10


基于TI-RTOS的CC3200调试过程记录(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:湖北省荆州中学、宜昌一中等“荆、荆、襄、宜四地七校考试联盟”

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: