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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, ^# }. `* m* x; t  A) Q
& p( @* b, m& P- q5 x' |6 @    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& p! G6 g1 g7 m4 d; L! ]* V4 h) t6 K2 s7 a" C4 l+ w
其他程序段。。。。。
' ?9 B8 |8 T4 t4 b/ o5 _
9 O# i( |6 {) X2 I4 {   free(x_d);
6 r; l, _1 E& I0 m
& ?1 _4 q: \" m* M使用DSP侧单独调试功能,验证动态申请没有问题,
% w4 o1 \( u! U- }2 {) I( H& D7 _  [! G1 _+ i) `
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' N$ Y# h* W* @3 O1 p" I) d9 I
" c7 V' G/ o. X

3 [1 N* ^% j/ I, E8 D: B% F' R# v; b4 R3 C3 K( ~# F# f) l- G1 }
& M$ N. v( O8 Y6 n" U) l' u7 |

* w$ J+ i0 h2 X/ c. ^) U3 R
7 R: Y8 ]9 E  f6 g5 z: b; O. X+ q$ G# p( @% {$ N1 U

- h$ A+ X" N2 i0 t- d3 F/ G% Q$ Y# _2 r
5 }. S, O3 j: d1 y: J: j
  ]8 D# J7 q, l0 o  ?. ]  t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 e+ f5 ?# X2 z) |  E$ o  l我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: h) U! d. W3 h0 B+ M* X$ y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 @* Z4 z/ ^5 w

, U$ i2 N% x  i" H# R7 c. V* w0 g是不是需要在DSP.CFG中进行配置
  K' Q. N3 ], S2 i' s2 V$ w我现在的配置为
; F2 W4 {4 i) f' w9 `
8 U8 T9 e- }/ V/*  M9 h' n8 p/ U/ p  g8 O' K9 n
*  ======== Operating System Configuration ========
+ Y( P4 N, R1 l */
& C/ `0 I: W# i7 M$ |6 R" p; t9 {2 X! Z# ?9 f9 y
/* no rts heap */
2 L- b$ G- m2 JProgram.heap = 0;
2 q" Y3 x1 Y; uProgram.argSize = 100;  /* minimum size */
/ |( c! ^$ ^9 qProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 c, M3 V* G  U! `. B

9 W( F; |& v' k/* create a default heap */2 v% ~* ^; V1 Y1 X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; X- z) U* w  J' U, q0 u
var heapMemParams = new HeapMem.Params();/ H5 r& I- @0 h4 S$ K$ r5 J- {3 G
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) B& H5 `$ M3 X$ e; a9 i& z
$ R- g+ z' b) |& @
var Memory = xdc.useModule('xdc.runtime.Memory');% ?! o# Y5 U2 L- f  w- x8 I- v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 A, g: C' @) c6 z" m  x3 Q; A. S

4 ~  J& _5 w' t/* configure System module */9 i1 b+ A9 S: H; h
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* _0 O  m  \& |5 s+ _2 y; s9 D6 pSysMin.bufSize = 0x1000;
) {0 D, ^0 X/ TSysMin.flushAtExit = false;
9 d9 n, F# p. o9 g  x
0 D5 z3 b3 ]* Y4 O9 u, T; Uvar System = xdc.useModule('xdc.runtime.System');7 p4 \4 l! x1 \# c
System.SupportProxy = SysMin;# i: q' {: {( ~
: ~1 `, P. i8 u8 Z
/* configure SysBios to use the lower half of Timer 1 */! P' Z9 t) |) m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 p, t( A1 \1 r" A6 ?& yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');' B& z. y  t3 K' v+ `
Timer.timerSettings[1].master = true;
& r' e" r& c) l9 KTimer.defaultHalf = Timer.Half_LOWER;/ W7 R+ a3 [2 M" f7 x0 n0 J
Clock.timerId = 1;# T# C4 O- q3 t, ?  a

: c" T5 F: N- D( ?5 I/ l( I; k9 G, v5 I" q: ]6 ]8 g0 O
/*
3 G$ T( o- w% q) O( `' b *  ======== Miscellaneous Configuration ========) `6 C9 a) L- \* w9 g$ z& i7 w; Z3 p7 @
*/$ p: {& T) H' m$ v' K# D
5 B' u- p1 _* n6 A9 o% z
/* set default diags mask */, W+ z$ Q/ ^" V# @4 T$ C
var Diags = xdc.useModule('xdc.runtime.Diags');
# f& n1 Y+ c3 q* A8 ~var Defaults = xdc.useModule('xdc.runtime.Defaults');2 ^7 j2 e5 U) Y( ~! ]

8 z. ?: _; T$ O0 c& QDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) j' J  p9 m, }- q: EDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' [/ O* U$ i7 t1 U4 l4 zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 z- W# o5 t* d- e$ `: u, {# X9 [1 lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// [) d& p/ Y; A$ }9 P& v2 h/ h' @
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' X% E# ]" d+ [Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ T' o: u5 Z! U1 f% ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 V! n- O6 @, x# }" R; {+ [Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( w& o4 C, @' v/ @0 o2 H7 ~0 k9 L
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& m0 F- X6 U2 W  E# H) i0 wDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! Y6 k; Y/ z! o$ T2 |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& V$ e* n" P0 E9 |, I: LDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* E$ q  \% m# ?: D4 X0 E; `* g8 pDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 F' H' W. K1 r8 D# l  SDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) p1 A0 Z. T9 k) P  E/ ~: q
* Y# }# l% O2 c. K$ G/* override diags mask for selected modules */
7 }* l7 Y" V* Y; n% s: cxdc.useModule('xdc.runtime.Main');
5 m3 R/ Y# o" Z9 cDiags.setMaskMeta(5 c0 j1 ?+ H3 R
    "xdc.runtime.Main",+ t* u- i1 m/ ~$ P
    Diags.ENTRY | Diags.EXIT | Diags.INFO,& [" N1 E8 _4 Y- D' S+ K" [
    Diags.RUNTIME_ON& m+ ?/ S; @) i* g: P0 ?
);# K( {7 K# r2 a* }7 D9 J' r; ~
5 W6 t2 d8 E9 T
var Registry = xdc.useModule('xdc.runtime.Registry');7 X- N  U6 F& y+ O; K( z6 P
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) g2 t6 @9 W9 R, w; o& X2 `Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 I# Y7 g# g# \7 h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 C' L) U1 E6 c: _1 S
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 l$ `  f9 b8 B/ [
3 W' |+ ^7 j5 B3 E9 H! J
/* create a logger instance */2 q- }8 E* b6 E0 f( [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# I4 s4 K5 _) o( \) @
var loggerBufP = new LoggerBuf.Params();
+ V( S0 s3 q: p7 ^6 g  AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 _- Z7 o6 c& r* i5 P( F  j. ]8 f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;, x5 j9 m, i$ L% `0 K% L

9 p6 I: e/ Z: zvar appLogger = LoggerBuf.create(loggerBufP);
9 P- v  K  l3 |6 {appLogger.instance.name = "AppLog_Core1";3 g; ?5 o& z" s& R: [6 {! m' ?
Defaults.common$.logger = appLogger;: J; y$ r" ]0 b! V
Memory.defaultHeapSize = 0x8192;   
# L# Z+ _. `" Q- K) ^Idle.idleFxns[0] = "&LEDStatus";
( K; B& H0 v& }/ n/ @) vCache.initSize.l2Size = Cache.L2Size_32K;
; l0 s* Z; J! {( ^+ X' e1 i. s4 b; n. ]' V3 ?  X# n* t' S
回复 支持 反对

使用道具 举报

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 */
8 F' K6 {, @$ x! N" bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ [. x  Y9 ~7 jvar heapMemParams = new HeapMem.Params();
3 Y+ h+ D+ p8 g' ]3 f( `+ MheapMemParams.size = 0x4000;
: U0 m& T% ^' u3 V) |- ]$ k, X! i. u  B
var Memory = xdc.useModule('xdc.runtime.Memory');% w3 o& Z8 v. o. v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 z( I& ]2 v  G( Z6 y
2 i! w1 e* q- w; H我大约calloc  每次共计大小为5K*16bits,$ q+ P  M6 _( {0 q* l
而默认配置才0x4000、需要改大。) j* T  Z$ w, i( v# @& ~0 i" [; L2 {

3 ?) F0 Q/ N, c/ N7 |2 M7 v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" z; B$ Q6 Q1 f/ |7 RProgram.heap = 0;  \0 o3 [' x# r8 f" _2 z% f
Program.argSize = 100;  /* minimum size */
1 B$ i3 f! D6 |1 sProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-11 14:58 , Processed in 0.044370 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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