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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' Q7 F5 f% j" `/ u- s/ Q% n' F; B

) w' a0 \5 O" [0 a4 M) y. H* S& M    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; P( Q+ u3 n( y
2 o/ |- F% m; ?. w5 o% R: A5 |
其他程序段。。。。。- y! J3 |& V0 G0 x

" q5 z# w6 C. e6 a   free(x_d);
8 p7 U+ ~$ K$ b9 l; S# k
: M( s7 @$ [2 s+ C5 N使用DSP侧单独调试功能,验证动态申请没有问题,
6 D$ T  C% z; ]8 b3 v) L7 }6 W$ M0 ^1 Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: f; K1 Z7 U$ |( S2 M4 ^

  w4 I0 G# y2 ~2 {9 ?- o; m6 c+ @! @4 G! w

) W4 c* _( ~1 \" p5 ^( \5 v: L1 I7 o

! Z5 V7 a) X" ~+ V5 a" P: n3 Q# T1 j4 X: H# A

% y* Y& {! d0 S; f/ h
+ `) F6 y7 M. ^, K2 F7 m+ w" \9 ^3 x/ q" `  ~; g
. i$ x- w/ k% Y$ @! Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& @- B" o6 X! j1 [% d/ ~" d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ [  K# G/ d  q3 u2 |(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  X* P1 _# N" e" I: \! W

' a. M& w0 x7 F' L) M% P' X是不是需要在DSP.CFG中进行配置" k; d' w) i2 A2 i7 |
我现在的配置为" U1 \7 z* v  T* @5 [$ d0 A6 t3 X0 U: x

9 G) U2 x  k  c# `. i$ S/ k/*
% r2 \+ e8 X) a4 G4 ~ *  ======== Operating System Configuration ========
1 k* r" Q# E  V! O; o8 l" Y */9 l* R! o1 W% {

4 a+ p$ r6 d" O: I6 s& ~/* no rts heap */0 N$ C5 L* N4 U3 s9 G
Program.heap = 0;
, g+ c# v/ G, i/ {( pProgram.argSize = 100;  /* minimum size */
* v1 \4 E2 U7 V5 p* y$ DProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ x, l8 b6 V6 f4 Q+ D
. D' T! [& F/ F2 M
/* create a default heap */
1 g! J+ \, ?& |6 z6 T1 h; Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 `, ?% }) p' _; h; ]3 N' hvar heapMemParams = new HeapMem.Params();9 t( i9 a7 {! P9 {0 `# F
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, @! L' r$ u$ Y2 A

3 S8 x. U; H/ e' F
var Memory = xdc.useModule('xdc.runtime.Memory');
: u# Y. v& R4 e0 FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 G& ]+ n  ^4 F5 \/ S  @! T' p5 U4 b
/* configure System module */
8 P6 p9 \/ w8 \var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ _% g: E8 h3 d' z5 I9 FSysMin.bufSize = 0x1000;9 Z+ H" T9 N7 M
SysMin.flushAtExit = false;3 L& `' L1 R7 B8 x1 A

8 |' g- L3 [0 S8 q. `0 evar System = xdc.useModule('xdc.runtime.System');
; x, x& ]! \$ b8 Z/ u. X2 e% m! }System.SupportProxy = SysMin;
: |4 v- ?" Y, k/ A: {! ~$ [
0 _; r1 G% \/ `; c+ B" P/* configure SysBios to use the lower half of Timer 1 */7 X3 B: V8 f' y1 ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 I4 ^3 q- @8 V) {0 n. ~0 mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 N; R$ S# W' b9 ?
Timer.timerSettings[1].master = true;
9 a. s& V* M9 v+ w2 \- A+ q8 Y9 m+ JTimer.defaultHalf = Timer.Half_LOWER;
3 _( R; l9 u) K& B, w# @# @Clock.timerId = 1;+ S! j2 w" u, I- E

0 ^" m+ b( g* `9 G) h6 P% d4 H- P
/*
; @) X2 N/ r% G6 _- ]6 @5 _3 y *  ======== Miscellaneous Configuration ========
& }9 [- v, {* A' o; A */
4 I5 d0 ^' E% k1 |' |; j
* l" Y( M. P' \* n/* set default diags mask */+ L- }" d4 q% s
var Diags = xdc.useModule('xdc.runtime.Diags');3 H7 `. C# ~$ f6 Y# ?) B" O
var Defaults = xdc.useModule('xdc.runtime.Defaults');* Q/ R0 t  O5 p+ ]

( `, E  m8 |5 a* f  ]& \# |7 Z. R  DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 T' x. u$ l, B9 h; sDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! j% M+ c# Y+ o  p8 ]6 BDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: s9 v7 v& _9 q; j' k1 \
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  n8 L# J# @. v& w/ R+ n
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 k. K- Q, n3 H. _0 J8 l7 ~Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, n. e: A8 S3 c* qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 v, K9 G$ @) w* D; P( h' g0 w  y/ w
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& Y# S- |7 u8 @) ?# j1 z+ hDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: D0 F( v/ _0 E( l* ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" ~+ F5 X  I% N' Y0 `( Q* eDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& o% e3 i, e) O8 K, s, u0 ^Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 U& ~  W- s$ ^+ V  q1 zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( j! A2 m, p4 D8 `Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 }. x: A; a$ M5 k
$ w8 w$ g: @. I7 \" F" `* V/* override diags mask for selected modules */
/ B& v" b# ^" e: s5 \xdc.useModule('xdc.runtime.Main');: j  _* d; d) y% p! s. C
Diags.setMaskMeta(: |5 P0 N8 T0 g* F! `/ k, V7 Z6 r
    "xdc.runtime.Main",) J) a0 [$ e7 q& `6 ^4 ^
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 U0 {' i- D" x
    Diags.RUNTIME_ON+ ^  f9 E" ]! I6 R
);* W- y+ A! x7 t0 f
( K# x$ r; [! a# t, y: K
var Registry = xdc.useModule('xdc.runtime.Registry');
% @$ h3 n$ H  e' U' RRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  T8 c2 l" W7 Q6 }: [; |& SRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 D# ^( W/ P/ K9 e$ JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ l5 t# k2 V" U$ d, b& r
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" H) R4 }8 V( ]5 }1 m0 h: @; t) |( ?+ n6 l1 ]
/* create a logger instance */$ u% P; G4 d" J' \0 [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ Y& U) J9 ^* W3 {
var loggerBufP = new LoggerBuf.Params();" e, x/ D9 {. K9 ]9 P5 T8 s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 |- \  c9 \+ ~, T+ LloggerBufP.bufType = LoggerBuf.BufType_FIXED;& U; F) S3 K) E
& V$ y6 [. q2 `; o. i
var appLogger = LoggerBuf.create(loggerBufP);! s0 G$ L1 O  u2 Y. H
appLogger.instance.name = "AppLog_Core1";
" M* T  I7 g0 y  q* F3 ?Defaults.common$.logger = appLogger;
  ]% z2 M7 X  c0 e5 W  `Memory.defaultHeapSize = 0x8192;    + j+ D# b, }  ], o
Idle.idleFxns[0] = "&LEDStatus";4 M, _6 r0 G/ t: z3 ~) t
Cache.initSize.l2Size = Cache.L2Size_32K;. e/ A& L. b; g$ y8 f- f2 ]
0 t8 ~6 O2 P) O: c* B* Y
回复 支持 反对

使用道具 举报

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 */
, G) J/ P& y( h4 x7 q0 nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( s& w: I5 {1 T+ D: u: y& M
var heapMemParams = new HeapMem.Params();
% a, G  E1 K' O! b8 X2 fheapMemParams.size = 0x4000;
& E9 G+ x; P0 b  {8 {+ b+ v
& l% `/ t9 `0 wvar Memory = xdc.useModule('xdc.runtime.Memory');
8 z$ F* H5 a; f7 w* {7 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, K8 u* B& b! P! u$ k% G# X  q, B2 K4 H9 F0 S: @( D
我大约calloc  每次共计大小为5K*16bits,
+ d" @# b9 `$ D! x* E- B7 Y而默认配置才0x4000、需要改大。
; X, _! W6 w7 |5 V% J
1 [4 F: l' r0 J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' f9 o& ]: A. TProgram.heap = 0;
; c, t" m, d- n9 `Program.argSize = 100;  /* minimum size */& ?3 t5 s& V- T0 A" N
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-25 05:47 , Processed in 0.042065 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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