热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自己做单片机实时操作系统1前言

操作系统在之前对于我自己还说一直是一个很陌生的东西,不知道该如何的理解和定义。终于当完成某些比较繁琐的项目时,发现多任务的操作系统是一个

操作系统在之前对于我自己还说一直是一个很陌生的东西,不知道该如何的理解和定义。终于当完成某些比较繁琐的项目时,发现多任务的操作系统是一个很好的东西。

之前总是在看着别人怎么去实现一个操作系统,最终有了自己去写一个的想法。按照ucOS的作者说的一样,操作系统最终就是一个保护寄存器和恢复寄存器的动作。

手上只有一个MCU飞思卡尔DG128的开发板,然后就开始写代码吧。当然要先练习一下自己的C 语言啦。

1、理解一下函数指针先。

我们知道每一个函数都有自己的一个指针

void ProcFun1(void)

那么ProcFun1就是一个指针。

如下面一个我测试的程序:

typedef void(*VOID_FUN_PTR)(void); 定义一个void*的类型

void DelayTime(int duty)

{

 while(duty--)

 {

  _FEED_COP(); /* feeds the dog */

 };

}

void FunTask1(void) {

int i;

 for(i = 0;i <8;i++)

 {

   PTP = 1<
  DelayTime(50000);

 }

}

void main(void) {

  /* put your own code here */

  VOID_FUN_PTR pFun;    创建一个局部函数指针

 InitSystem();

 EnableInterrupts;

 pFun = FunTask1;       对指针进行一个赋值

  for(;;) {

    _FEED_COP(); /* feeds the dog */

 (pFun)();            执行funtask1,取地址,然后通过()执行函数。就可以执行到制定位置的一个函数了。

  } /* loop forever */

  /* please make sure that you never leave main */

}

到这里就知道函数指针一个怎么去用了。下一步就是栈是怎么保护和恢复的的。

编辑原因--修改函数指针的理解




推荐阅读
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • Java 实现二维极点算法
    本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ... [详细]
  • 本文介绍了SVD(奇异值分解)和QR分解的基本原理及其在Python中的实现方法。通过具体代码示例,展示了如何使用这两种矩阵分解技术处理图像数据和计算特征值。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • This request pertains to exporting the hosted_zone_id attribute associated with the aws_rds_cluster resource in Terraform configurations. The absence of this attribute can lead to issues when integrating DNS records with Route 53. ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • ------------------------------————————————————————————————1.定义一个类,实现与被增强对象相同的接口2.在类中定义一个对象,记住被增强 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
  • 本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 本文详细探讨了Android Activity中View的绘制流程和动画机制,包括Activity的生命周期、View的测量、布局和绘制过程以及动画对View的影响。通过实验验证,澄清了一些常见的误解,并提供了代码示例和执行结果。 ... [详细]
  • 本文详细介绍了8051系列微控制器的中断系统,特别是C51编译器中interrupt和using关键字的作用及其使用方法。通过深入分析这两个关键字的功能,帮助开发者更好地理解和优化中断程序的设计。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
author-avatar
手机用户2602939233
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有