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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 n% a% F: S4 Y- T" h+ N% |/ D* D$ t" C; t$ f) W8 P: B2 c4 ]
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& l5 J9 X: n% ?5 p5 G

! C4 g% X& I1 K! J- g其他程序段。。。。。4 s. h9 ?1 z+ j
" q0 O& H0 D4 |5 p  l: P
   free(x_d);0 T8 a* W7 S) Z/ k7 A
2 f7 X+ s0 @1 M% `) G5 z( V
使用DSP侧单独调试功能,验证动态申请没有问题,! Q# \( T/ ]- @0 C
  v8 B$ z7 u; h  Y4 M: Y3 C) R% p8 [
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% e2 t- ~8 v% L$ l" C8 Y. s- [
) E' `( V6 v/ B6 w

* m: x, i+ H, g$ Z1 X) K0 C9 `, K: Z9 i1 O

& X& b; z9 H( |1 j/ J
9 @$ x( i. K0 l7 ?0 u4 u9 M6 W0 b& F( v& ?6 e2 \
0 F1 F6 w% a# \. {/ Q9 B7 E, s

$ O+ @: O8 J6 T+ I" l9 j. i' h6 v- b
& z' F% D* i& L" n% A, a  e7 f/ R/ {6 Y; S0 [7 p- S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 x# n7 x' O) h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 Q2 ]+ f8 L; C. _0 w( Y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( u# ^. }( q8 d7 D* p+ `

  Y$ v/ y8 @. X6 C8 e是不是需要在DSP.CFG中进行配置
0 e3 [1 U8 K# a. y) M! b我现在的配置为
4 C1 `& t. F$ L. R) F
( }* |! a1 Y) b4 Q" L/*
4 [/ K3 C) F1 I% S) y- V/ ?# a *  ======== Operating System Configuration ========1 p; X% J9 B, d3 p9 \
*/
" O# J! R% f; Q7 R6 q; P& F* c) ], o6 R+ I4 S6 L# M
/* no rts heap */
9 {$ f. c- x3 A, mProgram.heap = 0;
: V/ S8 k  `( X- J7 K$ cProgram.argSize = 100;  /* minimum size */
! N2 I) F* e$ tProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 B7 B9 Y+ T9 C/ Y5 J
( v7 h; z9 n7 [/* create a default heap */
& L* k: L; k2 H6 K! r+ [- [& z* kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 D3 e& }0 W; K/ hvar heapMemParams = new HeapMem.Params();) r: X/ N, E# A* u- w) D; ~( s
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  c4 Y) l& `. F# N( `& _6 X  T

. K$ Q. _4 W# d% ]5 p
var Memory = xdc.useModule('xdc.runtime.Memory');! R7 f- v$ ^$ _( M  K5 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! |/ P1 P9 N3 K1 l5 O0 s- f
. u6 w' t4 K) O5 Q* H" T& K; M
/* configure System module */0 c- [7 @$ F5 \, K8 f
var SysMin = xdc.useModule('xdc.runtime.SysMin');( I; G" ]( R+ A; n+ I) \' C. I
SysMin.bufSize = 0x1000;
( J% a  x2 D4 T1 q3 p: ~. `2 _SysMin.flushAtExit = false;
2 \; l& ?3 F  d" ]) P- m
$ V, ]! b! r" N& a; rvar System = xdc.useModule('xdc.runtime.System');% q8 V6 `4 ~: y- o& u% i* b
System.SupportProxy = SysMin;
  ^, `' J# D# n$ `7 m3 r* [* @8 Z( a5 |4 o8 H
/* configure SysBios to use the lower half of Timer 1 */1 F; x  d/ b9 e. k
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 A  P. @+ ~) {
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: c: w% Z; c+ M
Timer.timerSettings[1].master = true;
7 m1 S5 t7 U& o. \- v8 B  nTimer.defaultHalf = Timer.Half_LOWER;7 \) I% o; r3 v+ A) c' U" ?
Clock.timerId = 1;
3 l7 [' T9 ^( S4 ?
9 t3 K" V7 V- I7 G
% K$ j# k9 N$ Q) U9 b* V1 j/*% Q, J" @- [' i# ~+ u$ W" h
*  ======== Miscellaneous Configuration ========( s, `( d, m: t3 ^
*/
% M5 p( b1 F/ G/ W! j: c
/ |0 z2 H$ w8 t" x# |" \/* set default diags mask */5 o+ ?& c5 e2 c* R" `, k% e
var Diags = xdc.useModule('xdc.runtime.Diags');
0 P* B6 h4 G7 ?3 q! X5 rvar Defaults = xdc.useModule('xdc.runtime.Defaults');
& i( D, V  a' E. ^) P1 d( z) S
- D! m+ P3 ?' v! `Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* G* q5 b$ S( f3 g4 g4 ~5 K7 @9 s8 F
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" b7 z& X' P; M$ Q5 [" i8 iDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 T+ L( w- p! j9 l3 z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) \# j" K. m/ h% v
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- i& S3 |( P" D, Z& B; K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; h( `+ u; h, n+ Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% m5 t* k! S9 O6 ~$ RDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; @2 s5 n6 ?" S& LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( Q% U9 e$ K8 b- [Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. R8 t# _7 G0 ]# f- M: y6 HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ I, ]+ X* V+ l+ G0 [6 H7 xDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 t3 D+ m0 Y) ~8 L; b! ~: G: F$ \1 ADefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  `' p2 l  G; L" n$ ZDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! g2 G" \2 g( g$ O' T4 c
7 H8 j; u7 ~9 y8 v0 q
/* override diags mask for selected modules */
7 u: s+ {0 b8 Oxdc.useModule('xdc.runtime.Main');
/ a0 ], d. x8 QDiags.setMaskMeta(, O* ?; k7 U' s9 R8 y0 s1 A% @
    "xdc.runtime.Main",8 f0 r* ]3 i6 {
    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ t. S8 M) L' A' l, W/ A' Q
    Diags.RUNTIME_ON
! V3 J2 a- k& {; H' k8 I) l8 b);) y7 ?7 Y( {& r5 }! t

, T/ i0 E; Q* C! f8 `8 w5 Nvar Registry = xdc.useModule('xdc.runtime.Registry');& h  s9 X" W2 Q4 B5 H" g# t9 e# Q1 f0 Y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% v/ Q. I# l" A! f9 h2 |( s
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 ]" A1 h; G% g2 R7 D# k, TRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 F4 Z/ B+ m, C5 {5 J
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;. V5 m; t3 q! ?9 P6 A
- _. ~9 B2 t/ ]4 W0 T) H/ D
/* create a logger instance */
( O* x( d9 [- z3 M' u7 q" D9 evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 g* T1 n4 S# S% }. R& N
var loggerBufP = new LoggerBuf.Params();
0 a1 Y# x+ j2 a% I! UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 n: {& ?9 @0 Q- \2 ?2 ]: }
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 _8 S4 @5 A1 A
/ l" d% s" I* U# l0 b
var appLogger = LoggerBuf.create(loggerBufP);
3 R1 I$ u& m. V- W/ NappLogger.instance.name = "AppLog_Core1";
0 |/ t! P% [5 R% X" k0 ?% c: }Defaults.common$.logger = appLogger;4 J0 E. A7 O. p/ }, R5 x  `
Memory.defaultHeapSize = 0x8192;    . i5 D: D- f3 ]5 p2 x
Idle.idleFxns[0] = "&LEDStatus";0 `( ]* F* T2 f3 {
Cache.initSize.l2Size = Cache.L2Size_32K;
6 d% Q: \3 [( u' A0 t, m, R" z9 x4 D6 u; Q' u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */- z3 x2 b- Q/ G- ?0 a: n  H: M- W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, X+ G0 f' C* S
var heapMemParams = new HeapMem.Params();/ O8 N/ x* K& h0 E% r0 i
heapMemParams.size = 0x4000;
( G& k8 [9 U9 M1 w5 k& t
: b) q! q) z1 @9 s% ~& o3 Fvar Memory = xdc.useModule('xdc.runtime.Memory');
& O7 ]( H; a6 E$ B9 B7 O) XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ B/ \6 @2 i; b. Z
( F3 Y+ G+ w* V+ G- O1 ^我大约calloc  每次共计大小为5K*16bits,
5 F/ @- }$ z8 w# }) ^" w而默认配置才0x4000、需要改大。# @) t% s" m4 l7 a! Q" e$ _1 x
- U( b9 T+ \* ^; s: c6 m: [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; Q6 k# Y  [( K) L3 i4 Q; ZProgram.heap = 0;% [2 {7 ~8 V8 j7 }1 ?, f
Program.argSize = 100;  /* minimum size */% b' P, p* v9 `
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 18:49 , Processed in 0.042186 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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