关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 v, @1 s9 k* s7 ^: N. R

7 P' ^7 S8 M; X& L) D2 K    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ c7 U  S8 u3 R/ F) J0 ], c; g, m0 p& ~$ r. F- U: }4 t
其他程序段。。。。。' ~. W6 N& A: w/ C
# g' h4 k  q* |; P$ v. @+ ^
   free(x_d);% s' a) G1 ?- L" ?5 V
% n( {6 B% D$ @1 w
使用DSP侧单独调试功能,验证动态申请没有问题,# l/ o- y# @$ H+ Q+ x8 A

2 t% h* v0 c$ T+ c- Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) ~4 E. g8 n5 V- P: q1 s" y

1 G: f6 H# N# K4 ^
1 C# ]! g7 V% K" U4 ?. J9 k5 I! f

0 l: R: M' f3 }! y0 N
% p6 H; Z( U( T8 w! }$ B, N* F# I6 r

/ J  G- H% ]' Z" B+ F/ A( D8 E6 a/ g+ Q
( A8 r# A2 U8 \: ?

# m' I/ i" F9 R) h3 i$ l. Z9 f7 s
分享到:  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 */: y; X) {4 Q( {
Program.heap = 0;! W  B( Y, S- ^) `) i
Program.argSize = 100;  /* minimum size */
( s" [& R/ y1 J/ u2 vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
. N% E& d2 R, avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 R' N# O! K  s+ H
var heapMemParams = new HeapMem.Params();; r( k. [, ^4 B. p
heapMemParams.size = 0x4000;
: Z/ c7 i0 b( \8 N
4 n3 d/ g$ ?% d/ T5 Yvar Memory = xdc.useModule('xdc.runtime.Memory');
5 r$ x% i" ^) m- QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& m* D  |. E: _2 F5 F+ X9 G: M1 a# d
我大约calloc  每次共计大小为5K*16bits,6 D) h* x. _& k3 k3 ~/ }
而默认配置才0x4000、需要改大。
/ ^8 C! Z$ _& R# J" ]  ^% s( z/ X3 y& h6 ]4 j+ K
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
# o7 M% _  X5 p. @2 d" X/ z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  D/ S" C) r8 G7 J) |" Y- x(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 G: r# I' U  f/ v+ {# K6 h
- u9 @  c  V( Y* H+ J3 ?+ @$ V
是不是需要在DSP.CFG中进行配置
$ M9 f- f- `2 S1 P) k% h  G1 x7 v我现在的配置为
8 Z  V- [/ O5 H- Z( j: n( w6 k$ J4 v( J
& \0 i& x% L0 X/*: S* K$ q. _3 a1 F1 M( C, t, b9 V9 c
*  ======== Operating System Configuration ========. u/ L: u) U  Y  Z& \- L9 U
*/
" ~0 k2 P5 s  z% m
* k6 D+ Q: {$ L  B/* no rts heap */4 U8 R1 @; L) e' A/ Q
Program.heap = 0;$ W) o9 \8 K9 i, c6 G& z4 ~
Program.argSize = 100;  /* minimum size */) \4 Q+ C! M( N5 L# W; L: U. u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 E. M' J/ k3 F

, P3 P5 G' c( L) i. U/* create a default heap */2 t& q3 \3 S! {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' ?2 j- e3 K4 ]1 M
var heapMemParams = new HeapMem.Params();
& M1 P9 X( |# i1 |; Z$ y- JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 R$ f! ~5 m$ Z4 u+ g0 ?
7 `  |; a8 |: n; y  N! f
var Memory = xdc.useModule('xdc.runtime.Memory');
. b$ @5 o* w& TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 \0 H. q% L8 K) X4 j9 u$ [

2 q$ F  X  }& Z/ k2 I) p# W/* configure System module */
+ A+ K9 ]9 s+ l# Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
5 W& |1 ]* i$ a2 p( |7 K( BSysMin.bufSize = 0x1000;2 j3 k5 {6 A3 F
SysMin.flushAtExit = false;
$ T2 i; O- s* C" H* c5 |
+ b' J3 H& x$ s2 E9 u4 \6 Fvar System = xdc.useModule('xdc.runtime.System');
4 |' \8 ~0 {# {* D6 D! }System.SupportProxy = SysMin;
5 h/ V: |2 j& q: R! e/ H6 |2 V5 O, Y4 G4 l! n; P' ]
/* configure SysBios to use the lower half of Timer 1 */
( i& b" [" |( |8 i8 ~( e6 Uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 M  v$ ~% g* Z4 N. P8 p. Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ c' \$ q( x7 X
Timer.timerSettings[1].master = true;2 {4 r$ ?1 s) Z' p/ n' b
Timer.defaultHalf = Timer.Half_LOWER;
$ {. }: R$ C* N7 @. o. KClock.timerId = 1;
# U; y) X0 R/ H* ^, D  s4 R! C1 F+ a7 {" i  j$ o: }

: p1 G1 T7 p. B* a  \- l/*
, d/ Q/ S5 h& j4 V$ | *  ======== Miscellaneous Configuration ========- Z% Y; n. b$ _# I' @5 e/ w
*/, v$ e. W# k: Q% r; H
* h0 A$ y6 A+ I8 ]1 L+ {" Q
/* set default diags mask */2 x1 P9 N) r+ i. ]4 l$ L, x
var Diags = xdc.useModule('xdc.runtime.Diags');7 L9 _7 Z! m4 k+ e. o
var Defaults = xdc.useModule('xdc.runtime.Defaults');! {: F! n5 }  {6 c
- J6 i5 e7 l" j
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 M2 m# ^. U) X( I- D
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  U# P' B6 n$ z4 L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 w  u8 V' z- {: }" |4 {Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' j  \" Z8 \, i$ P- }
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 p- z, W/ c7 `$ [7 v+ sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 m/ p5 Q4 w- c/ s$ O; ^2 l
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: z& }/ j" e0 qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 _! J0 d: T$ }0 F3 TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 r; P" u' O4 I1 P" y5 |3 s* NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ S7 D1 m) N8 {! }1 x
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: D) e' E4 f) e3 |1 j$ }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 I" ]) \* H4 v) w
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; d) T% G$ _) CDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 p5 {" f* b6 T( K4 P2 v5 @$ X! i& R. c" ?+ E
/* override diags mask for selected modules */
8 N4 Z' P; I1 d3 g* Xxdc.useModule('xdc.runtime.Main');
( v. z4 b* I4 X6 oDiags.setMaskMeta(' Z% h" V+ K; J0 B2 w( l
    "xdc.runtime.Main",: `, K& @+ A. R* p( P  C, N% h! ~, s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 p) u% H, x6 a8 R
    Diags.RUNTIME_ON0 Z% n# }: X0 R6 Y4 ~9 q
);. G; G2 x8 E+ ^( A! B

# b" z$ W- a  R& Svar Registry = xdc.useModule('xdc.runtime.Registry');+ R7 W' h9 u' w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: `9 U, k. r, p" J* J' r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! B& F& B3 r! f& P% @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 Q: X1 b1 W5 A, B- w& [: l) MRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 }% \3 e! W" S9 ?4 e) c: d
/ d- F: Z0 z0 E# q3 o; ^+ O; Y2 e
/* create a logger instance */
/ V5 x) _* ?/ J: p. ~& F4 h$ Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# k( {7 \2 w& r4 ]) ?
var loggerBufP = new LoggerBuf.Params();! v( {  h- |$ p( U/ F4 Y0 P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 S* t4 h* f/ ^
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ _  F" X; d) A% V" \) O6 m& `
) k( p: j. I9 o
var appLogger = LoggerBuf.create(loggerBufP);
- [" G3 {/ k) f# m" UappLogger.instance.name = "AppLog_Core1";
( V7 f. `2 D0 k8 y9 s) e$ m2 M. ZDefaults.common$.logger = appLogger;4 I+ t: f8 L- o* w) N8 ^
Memory.defaultHeapSize = 0x8192;   
/ a" @- i$ J( `' r# q1 d- RIdle.idleFxns[0] = "&LEDStatus";5 I+ Y/ x" P6 A' F& Z
Cache.initSize.l2Size = Cache.L2Size_32K;. L+ g* ]" Z, U% d

/ p* v) u2 g4 Y' B) ~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 19:55 , Processed in 0.042704 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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