关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7590|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 g- H1 W" Q* W4 _& |( O% {5 \( }

% j8 I7 S7 H$ @$ ~* [. F7 y    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 f. e1 r  H) C/ L2 \* \1 N, r4 L

, U+ R' Q1 r; U, f& |( t5 s其他程序段。。。。。
7 `& S# f' M( s' N& b8 \
4 [' U7 F6 {% p) U) _6 c   free(x_d);
. R9 g* z) Z2 k' |# p  a1 i
8 o  G& _; k0 G$ c# ~5 u2 G: ^; h使用DSP侧单独调试功能,验证动态申请没有问题,
0 j8 Y; G$ Q6 J& i& e5 n9 c8 V6 ~2 K
4 R( d2 C! S4 m9 c+ E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& V5 i8 r& m% G
! M% N5 W* s% t6 ]) p' p& T" l

7 ~' {6 m2 y2 G; q1 ?$ J1 \9 F" ]; B# O
  x' t. g4 ~- t( D/ z
  `. J2 P. u5 t) _+ _' |, h$ q
8 L: p) s  D& F  O8 a( W
. D6 i0 ^9 [/ b! _7 X

1 x% q' v# W# a; `$ X+ v2 b8 b+ d) c+ @( e$ ~6 @$ I- x
$ p* \# Z9 i3 A- _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' Z( z$ y/ C0 s1 s/ ~Program.heap = 0;
0 I3 w1 ?6 K; c- X3 vProgram.argSize = 100;  /* minimum size */; U+ P5 {! a1 j; J2 ?; H" l) g& x- c; i' u
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */0 y- G& g+ ]  o9 Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& q. K; S& w2 t$ Fvar heapMemParams = new HeapMem.Params();
3 @; U  n2 H3 i$ m  T5 n0 e( r1 pheapMemParams.size = 0x4000;
$ P2 K0 g+ m/ a: |& R  {* n
7 Z  \4 L" }: O$ s: C0 pvar Memory = xdc.useModule('xdc.runtime.Memory');! w3 _. o" Z4 J" g+ E; w$ f* k. k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ L; V! [4 S, v. v' I( o7 g% y
, m7 z, |0 _  a8 U& p, I我大约calloc  每次共计大小为5K*16bits,
4 D) j# r* ~* B6 Z  `# n% N- W/ k而默认配置才0x4000、需要改大。5 S; t2 W/ [9 m3 x9 D/ L
& \; f: m* K" W8 a# o, [7 d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 z+ Y# P. B' _# b$ v* M( ?5 x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) P2 ~9 S$ S, z& x(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  `) N) P% C& [& _

0 M% a$ }0 w( h7 K) {+ U是不是需要在DSP.CFG中进行配置9 M& S1 t8 f4 O3 R: |# K+ Z  `
我现在的配置为8 k! y7 m0 I" B

. `5 [8 c$ b. Z$ [8 y5 P+ L/*4 Q3 @0 K: V# {. O( L4 N
*  ======== Operating System Configuration ========- M' m5 F  j6 j
*/' |/ }# X8 }$ M; a0 e# E
- e# @" q& u2 D" C- D$ e  u/ k
/* no rts heap */: b" H: f! f2 q# W- y; M+ Z9 j
Program.heap = 0;" H. l- ^% w2 q9 v& y
Program.argSize = 100;  /* minimum size */: L# m. V+ u! v* y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 m9 w) ?: R- \+ w& S3 f
; B* A- h: i3 L& ^( @
/* create a default heap */
& H" q! S. O) W8 |( t8 m1 W/ avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: }! b1 K  y9 m) {
var heapMemParams = new HeapMem.Params();
" z/ b; y: d3 h  f3 \heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 k" I2 \, {9 Y4 g$ j; v  E, ~: x- Z
var Memory = xdc.useModule('xdc.runtime.Memory');) Z3 G7 g1 T( i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# t8 X2 k" j8 _8 v* l7 B8 B* x. S, U' i& a* C, V4 c! \
/* configure System module */9 A7 }3 {6 ~9 s6 l
var SysMin = xdc.useModule('xdc.runtime.SysMin');$ p2 K# k7 O  E) f
SysMin.bufSize = 0x1000;
6 N2 i: t3 N% K  b* }/ A. ^: i* @/ iSysMin.flushAtExit = false;6 [. F' l2 T) H4 \1 k1 B- w

  X9 o% E' D6 E& i' B6 z- yvar System = xdc.useModule('xdc.runtime.System');9 Z' B+ H# h" F) D$ ]5 e3 j/ ?
System.SupportProxy = SysMin;, `" s# N; k# R$ M2 r, q
2 Y6 V& P' W6 }1 E9 [8 o7 G7 t: J
/* configure SysBios to use the lower half of Timer 1 */
7 M. w: g# l* p7 lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! F4 G' ]; q) B" K' @$ t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 r1 v# p& |- D" p
Timer.timerSettings[1].master = true;
+ B1 W, d0 @; P6 bTimer.defaultHalf = Timer.Half_LOWER;" C7 Y  |) S/ g
Clock.timerId = 1;
+ d- G  o- B, `( ?/ x0 W; {7 I: ]- _& R; b- Y5 J

7 r' s- L  V0 N" n7 m; o/*
" o/ ^% A* }8 p8 y. C2 G *  ======== Miscellaneous Configuration ========
7 |$ |6 `$ v3 k- g" [/ S3 O */" e" B" s# @2 B% s1 x9 H
. |5 n& F3 r) {- @. Z
/* set default diags mask */
8 h1 _2 E  }, {' C  ]var Diags = xdc.useModule('xdc.runtime.Diags');
7 G( O, q$ H- v0 r* F4 J# yvar Defaults = xdc.useModule('xdc.runtime.Defaults');
1 X' F0 ~# `4 p* _$ u; O6 M: w" A' N4 n% G3 W8 n; W; D. E  w
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 u: k; V$ W( v# ^* K" H1 IDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) O+ |5 }3 Q; b9 qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( b. t/ v: L0 \+ c* [0 nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ v# I$ D; Y5 Q; R8 G
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 x3 P" O. p5 q+ i7 ^
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ o3 b7 K) b! }( I, Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 u5 R; h" M# j5 F( ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; t( m* F9 `* B
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 }7 f' `! S. s7 H  n' P) @( A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( Q2 ]. [4 I4 Y: I& o5 `Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' Z4 x( ?4 X; @* y# D1 k; o  m+ S% fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! W7 G: h  Y( n' Y$ d9 F, a; i8 P
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! N  k; F: v- w' G
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 p7 y! p/ r* y- U" w3 z2 I# o  s9 P! a( v1 t1 G2 c5 H
/* override diags mask for selected modules */
# B# v% @( {9 bxdc.useModule('xdc.runtime.Main');6 S+ f$ e2 {' K+ m5 C. r5 S3 b
Diags.setMaskMeta(
# g0 X' N$ {! F    "xdc.runtime.Main",
* t9 r/ ]# H( B0 E% X5 t    Diags.ENTRY | Diags.EXIT | Diags.INFO,, G2 K& @! _* M0 A1 d9 Y
    Diags.RUNTIME_ON
: I3 C3 k4 [* g);
6 [% q2 Q/ r9 j$ G4 q2 [
# Z9 l: `9 y. m, L8 Avar Registry = xdc.useModule('xdc.runtime.Registry');
- G) a. ?# O  ?- L& ?Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; d. q+ u1 Y- f* z% H5 Y0 KRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 ]6 l& {' e3 |* l# F+ V+ mRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 _- H" w# s4 X4 s9 O- b* @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) Y% l' B* }6 ^5 f# C; ?% q' m; ^' Q' n+ n3 T
/* create a logger instance */6 u7 c" n1 o* J" j+ ~3 M
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ k0 \" l( i0 _8 bvar loggerBufP = new LoggerBuf.Params();
0 x! L; z5 P1 a& kloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 \1 \8 K! s! w% W$ mloggerBufP.bufType = LoggerBuf.BufType_FIXED;$ I; W) f/ S7 y5 J

* ]+ }0 O4 r! X* Yvar appLogger = LoggerBuf.create(loggerBufP);, k5 m6 f- L  g; p- E5 S
appLogger.instance.name = "AppLog_Core1";9 e7 b% y! {2 }/ B6 n4 c) m' m
Defaults.common$.logger = appLogger;, H; F- }0 C; y2 S8 G2 d
Memory.defaultHeapSize = 0x8192;    ' g8 I* i& ?: r% [5 v4 ]
Idle.idleFxns[0] = "&LEDStatus";2 N+ Y* a: u  \. B: R* o
Cache.initSize.l2Size = Cache.L2Size_32K;6 o7 z' l& E) a/ x) K
$ m; k0 q$ n3 `( ]) G4 }2 i
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-7 16:52 , Processed in 0.043430 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表