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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# ^9 `, _6 b# _: O. T% Q4 [# q
+ c0 s0 {, x/ o# l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ \$ v7 ?3 r8 _5 H

9 Q- X8 X; V) N6 p其他程序段。。。。。, G! a! b, n5 V+ k: F" \" ~
' H* r' j( p( J" z- B& P# W
   free(x_d);/ K3 j% [) Z2 V

% V/ \. u9 l1 X2 K$ M0 H: n, R' a使用DSP侧单独调试功能,验证动态申请没有问题,$ Q) s9 Q  V' H0 z  |
. e/ e  ^4 F/ H. I, C. w- U
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! }) {3 Y' Z4 s, }  V

* [$ X0 m' r7 I/ O9 `$ D$ D4 q: _' i3 b/ }" z) z1 H4 }+ G

8 ?1 f( @; `" S/ @1 f! E6 Q# P+ Y% z# p& ^
  H# f- p8 n7 y2 ?" k1 f1 @

* h- c, B* g8 S3 A" l/ q* c4 l, r8 m" R3 V

- V  H; Y- I1 ]# }8 L& T5 N3 L) p, S& j3 u9 W

, S) q# |$ Q* m+ T+ [# z  ^1 G
分享到:  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 */3 I$ }9 G7 P) {3 y% x; Y: s8 s# v8 D
Program.heap = 0;
4 e- B4 e$ I, }$ P) k6 c9 ?Program.argSize = 100;  /* minimum size */4 n, T( B: h  L) Q9 a& ^2 J$ @
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */7 P% v8 a2 s4 f& P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 ~: @6 X. m3 `: C* h2 |var heapMemParams = new HeapMem.Params();8 f' l$ b. J2 e$ j. T2 E
heapMemParams.size = 0x4000;
! T- Q" ^( K. g/ ^7 y9 q, j/ v9 C" e' G( _) _
var Memory = xdc.useModule('xdc.runtime.Memory');) G0 ?. V0 ?( q$ N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 Q$ Y7 a! s4 K$ Z7 q1 j! m& |7 `9 }) O& n3 f, O# d
我大约calloc  每次共计大小为5K*16bits,
0 S/ a! N9 K6 u而默认配置才0x4000、需要改大。
6 Q* S; I! ~) x+ x% i$ h8 h. B1 C+ G& M# 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 | 只看该作者
补充说明
6 g0 e0 |! r! W/ A我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# g! g' z) n; ?, y% R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ q0 z% x8 N2 A8 O7 _+ F

+ B5 \0 \: M) f$ ~$ R是不是需要在DSP.CFG中进行配置0 ?9 H' v" T# f" k  t; v
我现在的配置为% s, j9 J( y6 X1 R4 \. y

. l) d7 K4 L/ I( n0 N8 ]4 F, F/*4 k4 t+ b8 Z* l* L6 W  J% K
*  ======== Operating System Configuration ========
2 G! J$ V3 b3 K" e7 E% R; D */
# x' u, y" I9 ]" I; d1 i& r& }
5 A" z# k- F6 T. S4 C2 s) a3 |/* no rts heap */
* Q- S4 n# [$ |6 F" kProgram.heap = 0;9 O( @# D3 S5 w" k$ U
Program.argSize = 100;  /* minimum size */
, j/ q0 q) c- A6 JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( Z3 l3 ~' T! U8 ^
2 l/ j) S/ W" o. ?/* create a default heap */$ p- S! T( V% F% w7 ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" r$ V* O5 B2 R  L8 j+ Z2 ]3 Mvar heapMemParams = new HeapMem.Params();
- l% ]' H9 e) B' {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 Z! M7 R: K) e3 E
, b4 h# f: u' x$ @* b/ W- Z
var Memory = xdc.useModule('xdc.runtime.Memory');
. F  A: M# ^  \- t3 [) pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 `# A8 j* Q& M+ ~
; ^6 G2 b$ n6 M5 G: Z1 C3 r2 G/* configure System module */
) @/ {8 i: T5 Lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
  m/ C2 z* O+ w! ~4 E. SSysMin.bufSize = 0x1000;
! w2 f- y- w9 f7 u* @% T/ \# aSysMin.flushAtExit = false;
* t! Y2 s' n" y- J! P. a9 ?( Q/ d2 N' Y% |. E; \) g7 k
var System = xdc.useModule('xdc.runtime.System');
$ y2 ~/ g' E! }& E6 a- qSystem.SupportProxy = SysMin;
, r1 h; b+ J6 q  B- J# q# p% ]' |
$ \1 Z( p8 _3 n* Q2 M/* configure SysBios to use the lower half of Timer 1 */, T$ K7 o) }  j- X$ p) b( z9 E
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 h2 k1 F' e- a6 v# j! r, n  g7 cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');! X) E( B) }8 n* h" s! x) a
Timer.timerSettings[1].master = true;0 z4 O, ]5 N0 z; Z
Timer.defaultHalf = Timer.Half_LOWER;
+ u. M' ~0 w9 HClock.timerId = 1;
  V7 u! }, P! G& q' w2 ^4 x
+ ~( `+ |( b' J: c& U2 i9 M
+ A' g$ d* [1 _" J/*& O5 E+ y1 Q# S1 L* u
*  ======== Miscellaneous Configuration ========
' i% b/ y& c; J! ?& g, L */6 `$ k9 i& T5 o$ h! a

8 M- \- }( K1 K" e' `: z0 Y/* set default diags mask */
8 Q! g; R7 v% i* Y- Q2 |var Diags = xdc.useModule('xdc.runtime.Diags');6 m7 P) G( ?( A7 {8 K6 p- {
var Defaults = xdc.useModule('xdc.runtime.Defaults');0 j1 ^) _+ f. {2 v1 {2 q7 V

" G( f+ A9 p. r! oDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 O2 g; \7 {. ?: t5 W; ?Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" U3 z! N; c, A. w
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* f9 a/ i: u8 y: RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# N% s4 K: R; A) j7 B0 c) eDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 x+ D3 Q$ V+ k9 j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 _. a* u) I: ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' U1 Q' K& `  v. w
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( c' o( \  R7 d$ r+ }* w/ u  ^
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ h6 G- g0 Z* R: Q% A3 }
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ B7 ^6 V- A$ p. k* M, G0 M" oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# o! b' M3 l. E$ u: nDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; u, N! W0 {5 v' c* j
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, E5 x& o) n$ d' C5 v, A; H3 r0 O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" X. s1 M( B( H" D" ^
4 {& |- I# Z) z( _  E
/* override diags mask for selected modules */" C0 j/ q' b: i) k' y
xdc.useModule('xdc.runtime.Main');, M$ W# x  _/ [. r& B" f0 S
Diags.setMaskMeta(- T( H; a% W; G/ n. d
    "xdc.runtime.Main",
, ?4 h" Y, Q, ?    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ D! @/ ]8 M- \$ F: ]" z4 I/ q    Diags.RUNTIME_ON! |* R" q( g3 ^+ H% |4 p
);  Q* E" Q" P9 E% Y5 b

) Y- Q! L- o9 v* Nvar Registry = xdc.useModule('xdc.runtime.Registry');
. q& E. S# J6 }Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. c' M% C! A9 o. s3 i$ X3 J" D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 @$ c: M: H. S) p$ F/ y  h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;# k4 t! @2 X3 t% ]
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 p* o+ w+ _& `0 v3 @' a6 [1 h2 m
: T+ g/ _/ g8 T* I
/* create a logger instance *// L  B% e7 R9 o* L6 D2 A
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 M" P$ ~/ T+ A! d( I% u' {' Pvar loggerBufP = new LoggerBuf.Params();
3 n" K6 v. ?3 H: A# IloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( D' ]( t$ R* P% U! }- wloggerBufP.bufType = LoggerBuf.BufType_FIXED;* D6 W2 v/ X, t; P
# ~& Q9 S3 R, F
var appLogger = LoggerBuf.create(loggerBufP);/ Z- I8 I; K, k" U$ w8 H8 {
appLogger.instance.name = "AppLog_Core1";$ z/ `8 a7 L6 r3 F5 j
Defaults.common$.logger = appLogger;7 `8 W( C4 |& ?8 l) V
Memory.defaultHeapSize = 0x8192;    5 J; p3 k- U. T" u9 N
Idle.idleFxns[0] = "&LEDStatus";6 v- y4 O0 @1 F; q& _
Cache.initSize.l2Size = Cache.L2Size_32K;
, C9 a0 j" h: V( k& G, _) t0 ], t+ J0 W3 M3 y# B9 B0 Q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 04:14 , Processed in 0.042176 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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