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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 y! u$ [) a5 c" p& \: ]3 i
& z$ P8 x" ?2 Y8 S# m2 J) O. D! d
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 c& N2 ?( m2 {3 |2 O

. @7 a, P5 L9 [+ A+ _" k其他程序段。。。。。
! V( I, Q- r5 R* |1 g6 A 6 u, o( c, R* v) s# |4 L  _
   free(x_d);
+ N8 j' H; h$ \3 |% b  q
3 \1 e1 Y+ j! d使用DSP侧单独调试功能,验证动态申请没有问题,
& ?. e* ~% n/ P' v- p* X' N1 O
5 h9 T7 l( J7 q% a+ t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 n5 v' s# c8 _1 ^5 ^. R

7 D# D, }& Z7 W* K7 H+ N: |7 c( R6 S, y! e6 m% \
/ n$ H, `. O  A/ r- S& E; E

( Y1 r, W" B* f4 g  V( x1 Y
/ G0 `! i- D! l  b
, G+ N7 Z1 ?9 K& N$ Z
  X, X/ [8 C) p1 ?3 Z3 E8 r2 P2 X" x8 ?$ p0 h$ J

) ?% w% J8 I% B: N) s; A# y% i! f4 A# x  L
分享到:  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 */
. Z7 I# u- e8 k; r6 y: ?Program.heap = 0;) z( l8 |" b6 F/ U
Program.argSize = 100;  /* minimum size */  w4 D( U2 Z( E
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */0 e; S* C( C; @% Q! b# `; p7 ~( i* P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 S& T7 t4 C9 w  w% z3 {) p) tvar heapMemParams = new HeapMem.Params();
; T. U$ V9 C8 f: c+ m5 o+ e, LheapMemParams.size = 0x4000;0 ]( \0 \2 x4 z- d' C6 M
7 b( B# j4 u4 @- }0 U# m
var Memory = xdc.useModule('xdc.runtime.Memory');& ?! e; x1 y1 Y) _& S) i. v$ l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ J5 h. L, I, x7 x! ~
/ j" Q* I. [  m  j7 q8 i0 s$ v; L我大约calloc  每次共计大小为5K*16bits,
* Y5 `6 b  |8 G% M而默认配置才0x4000、需要改大。
" Y# W  N' V- m( l6 K, g
3 V9 Z  K6 r3 b' Z& F4 h2 |
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
, a2 @, E- j! a  w8 [# l我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& L& C: M- e9 V% Z2 A% N
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ C  [* h4 v, N, Y
8 a- B+ _+ _. T# c, X: ]
是不是需要在DSP.CFG中进行配置( B; O1 l$ j4 N/ u1 u% L9 R- f# Q
我现在的配置为
1 m+ _* }2 L8 t; N+ E
! P0 M' h3 f( d- c' T/*
2 V- Y# G! K, Y4 l2 c *  ======== Operating System Configuration ========
1 B' @7 F+ j4 M: e */
) A/ T9 C; |; f4 b
" m- X5 A( Q# _  W: l" }3 K4 S; H/* no rts heap */6 T* @' [4 L& f: M0 j4 ~! B
Program.heap = 0;# D/ u2 n& `5 Y- V
Program.argSize = 100;  /* minimum size */
1 E1 ^9 t0 p0 N4 K4 ~9 _$ cProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' f' a$ X; \$ a% x1 T9 V9 |' h7 F! `; E! W/ {0 n& q
/* create a default heap */2 H; u  R& d. \5 ]6 W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) F& A$ H) m) y2 u/ q0 o& G, Zvar heapMemParams = new HeapMem.Params();
1 j8 }* V* M$ g+ |/ b- }, IheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; ^- F" R6 a- {) G- P) u$ T/ u" _0 V, u" \2 v* J& z; w* {
var Memory = xdc.useModule('xdc.runtime.Memory');
# v0 b4 @0 B9 z' b8 |+ jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 y- a9 {% P( i8 u

0 N$ D! r3 ]4 P8 ]! N2 A& F6 Z/* configure System module */: W3 Z% @  f6 ~8 @% C# m& D4 X
var SysMin = xdc.useModule('xdc.runtime.SysMin');% ~- m( ~. Z* [, W' P
SysMin.bufSize = 0x1000;
/ A4 b9 a* I( w- g" z1 ?SysMin.flushAtExit = false;1 F% k3 k( m8 k0 \

' P* J& p; F) J- m8 ]var System = xdc.useModule('xdc.runtime.System');5 g, `( U3 U. k( K: l
System.SupportProxy = SysMin;% p  W# R5 L5 r3 y+ Q6 j

! L, F2 L- R4 \" X( N$ Y# X- |/* configure SysBios to use the lower half of Timer 1 */
+ A/ q/ l/ I$ f0 @$ Q: [var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! U) G, ~0 Y+ Z9 f& c) a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');! d% |! R, i! A: R/ ?
Timer.timerSettings[1].master = true;
% M# f5 ^4 V% Y8 f5 U  V/ TTimer.defaultHalf = Timer.Half_LOWER;
! F4 r- p, I: A7 S, I4 Q- gClock.timerId = 1;9 _$ r" q( w" g& G1 S! x+ Q* P

' o, y+ J$ V% Y0 g) }, b1 P* M4 N# |
/*4 E2 `- u  X9 B5 w
*  ======== Miscellaneous Configuration ========
3 Z- l5 |% B) d9 ]# L& O */
& v& |7 X/ w9 M8 P
& Z) o" o& J6 C$ Q0 v+ {# X/* set default diags mask */" z) r& T- ]7 x3 Q. z* t+ ?
var Diags = xdc.useModule('xdc.runtime.Diags');
' V  W8 y  F6 k* r  i1 Qvar Defaults = xdc.useModule('xdc.runtime.Defaults');( G" T" ~4 j8 L, H5 f5 L
* e- t% h$ c4 @
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 \) F9 p! L5 V/ E4 O6 ^$ O/ k: rDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ Z8 i& Z7 b, P5 BDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: x5 Y/ @# p) H
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 z4 s* m) v6 d9 ~) j3 \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 y, ~7 z5 U' W+ c1 C
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' s  `- }' o/ P  y( Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 g+ T4 m! S/ U
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! m+ A( D* J1 Z$ d! w5 G: i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) h- C/ n% k( h/ [. \' e* mDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- t& B0 p/ O# v( w. W
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- F9 v5 \0 Z3 h3 QDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 |  a9 b. G3 d& m2 ^Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* O7 K% A4 F( V0 Y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 {1 [" \7 F' Q. j" g

1 Q1 |: k* r% s7 v' {* h/* override diags mask for selected modules */8 \2 a- S: J/ i; L
xdc.useModule('xdc.runtime.Main');- z: L2 L3 A2 Q' i7 Q  [
Diags.setMaskMeta($ i" H8 f1 c" z& v8 f, I
    "xdc.runtime.Main",; f* A# o8 _1 c9 N
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' [) q' Z- @% B2 ?    Diags.RUNTIME_ON
$ Y9 H! Q) o: N: S; x);
! O4 t' R/ H- F  S: ~1 O5 O2 i
) p  v- i! z' X: ivar Registry = xdc.useModule('xdc.runtime.Registry');
: b5 ]% [3 f8 p1 J% q5 bRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 W/ U# y! }9 K+ v- M% M' r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ Q/ t+ A8 I9 G) Z2 X. p/ i) y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 z* ~9 J- J* j1 i
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  A2 ?# K$ z0 |( b" Q
2 w9 p1 @- S3 D& M
/* create a logger instance */
6 |  W# {1 p% w- ~% S9 jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 W5 e6 n& \3 c" `
var loggerBufP = new LoggerBuf.Params();
% Y" L: ~% h* d- VloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" r* h5 c* ]- F& G0 O( g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- S/ U* k% u1 f0 a% ~( [4 W* ^" ]3 T. q* q( o$ P
var appLogger = LoggerBuf.create(loggerBufP);$ v( b4 G" r! b: H+ `( ~) z
appLogger.instance.name = "AppLog_Core1";& A* m; r$ E- F7 Q3 j7 p' n' R" i
Defaults.common$.logger = appLogger;
' E/ M( ?, L8 w4 @" vMemory.defaultHeapSize = 0x8192;    5 t8 b% P" [% f: B! K
Idle.idleFxns[0] = "&LEDStatus";4 w5 R$ s# e2 d3 H/ M* m
Cache.initSize.l2Size = Cache.L2Size_32K;- B& g5 G" G6 X7 D/ U( o
7 ?9 ~' k, \% ~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-16 06:15 , Processed in 0.045209 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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