Raw_os学习手记.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Raw_os学习手记

像裸奔一样,创建一个使用库函数的工程。然后从官网下载最新的内核和一个STM32的实例(stm32f10x-chip-verify),取出stm32f10x-chip-verify下的port文件夹和user下的user_extension.c。最终的工程结构如下。这里创建了两个LED任务。打开修改cpu.asm文件的PendSVHandler为PendSV_Handler,两处地方需要改。因为库函数提供的启动文件写的是PendSV_Handler。这里改启动文件也可以吧~关于库方面,需要在C/C++的Define下写入USE_STDPERIPH_DRIVER,因为我使用Keil5,发现原来的STM32F10X_MD不填入也可以编译。同时,软件会根据Device的类型选择LD,MD,HD等等。另外需要留意debug标签下的DLL设置。当仿真提示某地址只读什么的,可能是此处的问题。任务的创建RAW_U16 raw_task_create(RAW_TASK_OBJ *task_obj, //任务控制块RAW_U8 *task_name, //任务名RAW_VOID *task_arg, //传向任务的参数RAW_U8 task_prio, //任务优先级RAW_U32 time_slice, //时间片PORT_STACK *task_stack_base, //栈底地址RAW_U32 stack_size, //栈空间RAW_TASK_ENTRY task_entry, //任务入口RAW_U8 auto_start //任务创建完是否为就绪状态);根据这个函数可以知道,创建一个任务需要以下这些东西(以led任务为例):任务控制块:[RAW_TASK_OBJ] led1_task_obj;任务名:“led1”,参数:0,优先级:数字越小,优先级越大,栈底:[PORT_STACK] led1_task_stack,栈空间:LED_STACK_SIZE,任务入口:led1_task,就绪状态:1详细代码:函数raw_sleep(RAW_TICK_TYPE dly)是任务睡眠,起延时作用,任务会让出cpu。仿真的效果,LED1和LED2闪烁,周期差一倍。锁这里创建两个任务来演示锁,一个点亮绿灯,一个熄灭绿灯。任务1和任务2都要用到绿灯。假设在某一段时间内,绿灯只能被某一个任务独占。任务一的具体内容是,如果得到锁则将绿灯点亮,若超时,则改变红灯的状态。而任务二则是,得到锁便把绿灯熄灭,之后释放锁。任务一的优先级大于任务二。创建锁RAW_U16 raw_mutex_create(RAW_MUTEX *mutex_ptr, RAW_U8 *name_ptr, RAW_U8 policy, RAW_U8 ceiling_prio)主要参数:MUTEX的实体控制块地址:RAW_MUTEXmutex MUTEX的名字:”mutex” MUTEX 优先级:RAW_MUTEX_INHERIT_POLICY MUTEX ceiling_prio:0获取锁RAW_U16 raw_mutex_get(RAW_MUTEX *mutex_ptr, RAW_TICK_TYPE wait_option)第二个参数:超时时间,包括RAW_NO_WAIT不等待;0x1-0xfffffffe等待,超时即执行RAW_WAIT_FOREVER一直等待释放锁RAW_U16 raw_mutex_put(RAW_MUTEX *mutex_ptr)详细代码:Mutex任务1,Mutex任务2下面是仿真效果,红线代表红色LED,绿线表示绿色LED。可以看到,当线程1得不到锁超时时,红灯状态发送改变,得到锁则点亮绿灯。线程2得不到锁,则绿灯持续亮着,得到锁则绿灯灭信号量设计这样一个串口任务演示任务,当接收完数据后,释放一个信号量。另外一个任务获取到这个信号量后,将收到的内容再从串口打印出来。具体是这样实现的,串口接收一段数据,当收到 0D 0A时,则认为接收完成,释放一个信号量。此时因等待信号而挂起的任务获取一个信号量便被唤醒。串口采用中断接收。数据缓冲区为128个字节,当缓冲区满时,则忽略之后的内容,同时释放一个信号量。创建信号量RAW_U16 raw_semaphore_create(RAW_SEMAPHORE *semaphore_ptr, RAW_U8 *name_ptr, RAW_U32 initial_count)主要参数:信号量的实体控制块地址:RAW_SEMAPHORE usartSem;信号量的名字:usartSem信号量的初始值:0释放信号量RAW_U16 raw_semaphore_put(RAW_SEMAPHORE *se

文档评论(0)

l215322 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档