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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( c1 O2 N, ]9 @) D/ h! a
: _  Y" r/ K- |$ O5 Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" v% o3 I5 b3 V! l! I5 E; R' I# Z

, V% Q/ h- `$ n. M$ _其他程序段。。。。。, `, P) b8 X: O6 y$ J* m
7 f* A0 b& C. w
   free(x_d);
( W' S: f  B9 h( X1 @+ R: u; X% E& \
使用DSP侧单独调试功能,验证动态申请没有问题,
9 e, R! Y. B# z' t9 O
4 J9 E" r' Y7 S& y: a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" x% f' V0 X7 O  p

" e; g6 w% V/ B& C) I. @
. M- |+ D6 f' A+ d6 R) D. ~1 d7 `0 C
3 x) k. t' M5 T# q. k' }; ]; v- ~7 G

% \' _0 o- B. M/ c4 O  c
9 w1 W  r" g  g7 z3 t2 d: {3 K, G& n0 T. c$ B/ A

( ]9 X" b4 Y- c* |( x* V6 J5 R! M
2 B6 y/ x1 `# S/ r$ T: z: ?
; a& {8 a$ y8 w/ _# f
分享到:  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 */
4 H' [+ R' V- p6 C8 W( wProgram.heap = 0;. H7 J  a- Q5 A2 u. f
Program.argSize = 100;  /* minimum size */
# f3 U+ y6 k1 e# rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
6 |1 u/ o9 o' T" Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( m1 u: ?+ |1 w' Q+ ]; C1 T+ z8 u1 Hvar heapMemParams = new HeapMem.Params();
1 m5 i. J. T3 i2 Q5 v1 m! mheapMemParams.size = 0x4000;
, P' x  j: d# R, G* s5 W6 ^0 P0 x9 t3 x3 [2 h+ ?" {8 [
var Memory = xdc.useModule('xdc.runtime.Memory');3 x; [. a% T- `; w+ O$ B7 k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" y' i3 i) H; X$ q
6 {$ @. |1 [9 {
我大约calloc  每次共计大小为5K*16bits,+ f1 i; A4 m* `3 ~, Z  z
而默认配置才0x4000、需要改大。  T4 n" R# r% z' [4 I. b

- ?6 G4 u2 Y7 w* S6 \, {- v
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明7 ^) a) R- V2 k1 M4 z: K6 y1 C
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; v0 F: y; `/ S% I9 B(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, m, O& e8 T5 u$ I, n1 n

- T9 a' r# [( O" J  \是不是需要在DSP.CFG中进行配置
( @; y, C% D' L/ }* s, v. [2 ]: A我现在的配置为) I, Y; b  E$ f9 |$ c+ H

1 R( `: E8 i9 |* x. F/*7 C* i* w2 J$ V, r7 l2 e8 }
*  ======== Operating System Configuration ========' z! Z4 Y6 U1 e( k' `6 I
*/
' {+ J6 x0 n3 }
3 M6 h# _; Q) c0 ]. p3 |/* no rts heap */
8 t+ c' F0 |$ ~" H4 C/ }Program.heap = 0;
* S4 Z+ W! p' u& S; L" BProgram.argSize = 100;  /* minimum size */6 d! O+ I6 c1 P
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" g' S* E2 r3 l
6 `3 \, L- T6 D$ |' m
/* create a default heap */
' R8 Q6 ^* m* S! e* Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  ~) }0 g+ q; t6 Mvar heapMemParams = new HeapMem.Params();! l/ w# D; `4 G6 c1 h" I
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ |7 R) q! P" Y4 }/ @6 x! E

, ?$ O3 L! T7 e) c) \# N
var Memory = xdc.useModule('xdc.runtime.Memory');' D' h: t; X/ u1 ~# T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) d& X; h! h; _: k* T. R9 U
6 o7 c3 o2 l+ F, g1 n8 B; S6 ~/* configure System module */: R# e/ K) T. Z" o) w# G; p3 r, V
var SysMin = xdc.useModule('xdc.runtime.SysMin');2 j0 a# G" T* h" K$ @* G, _
SysMin.bufSize = 0x1000;2 N3 s+ l& o- I6 `  ?3 h
SysMin.flushAtExit = false;
. e8 [" u" y+ `; Y* L8 Z% s1 t0 q/ b; [# S
var System = xdc.useModule('xdc.runtime.System');
- y- l% R! A7 M! M# Z& TSystem.SupportProxy = SysMin;
3 V9 _% i6 p' O7 o) p( N& `: d
2 \/ {8 m3 Q, ?8 j9 {/* configure SysBios to use the lower half of Timer 1 */
5 Z. C5 L5 B! a' Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, {4 o( N1 I) _1 i8 [8 V9 Evar Clock = xdc.useModule('ti.sysbios.knl.Clock');, \6 j, C" W& q& G( O
Timer.timerSettings[1].master = true;  m5 u; e9 i; }4 ~  m1 ]* x
Timer.defaultHalf = Timer.Half_LOWER;
4 N$ |2 r6 d$ [2 {# r( T3 F" p. cClock.timerId = 1;
  D: y6 v  P: V7 s2 Z: o$ L' @, P2 Y# |4 _$ l, c  K3 Y

3 t+ k" l3 @7 A; d8 e/*" q% h# {3 z  }3 |
*  ======== Miscellaneous Configuration ========
, m' S# G7 q6 N9 G" ]8 ~ */; G! ^7 R2 J( ~% X6 ^5 u: u

7 b3 c  L" R/ M( F# o/* set default diags mask */' F9 x/ P& d) T5 ~) _) V* K/ K
var Diags = xdc.useModule('xdc.runtime.Diags');) P; \; O! H: E" i6 l  [
var Defaults = xdc.useModule('xdc.runtime.Defaults');
7 m, H% ]! a  |( Z/ H$ m) n
( z& f9 J1 u) v4 {% N- E  u* [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! O" k/ Z/ ]9 b1 u! ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  d7 s& s9 H1 @1 w9 T+ Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) J9 U% Y. ?* x3 s7 @  r$ WDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 Z; F- C. A2 ]& h/ ]Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& i8 L, Z2 }' LDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 X) m* m9 X" S; @( \& LDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 r4 r3 @3 u1 b' \+ r) y; M- l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ q: \  P1 ^0 `3 r$ `9 l
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- c6 }7 X% G0 }3 N% E" H* _% I- }+ C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' a# p" @% S0 p' Z- X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  L1 T: t9 K, L1 }* `7 Y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 C1 T6 w6 \+ X9 ?' S6 @Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! }- C1 ~' \0 W5 E8 m8 T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; f$ A# K7 Z  m* @5 `' b
- S" k3 W/ e* s, Q. h$ u" K
/* override diags mask for selected modules */. B% R( o' m1 [
xdc.useModule('xdc.runtime.Main');
7 j; D( E9 e  J6 ?% QDiags.setMaskMeta(+ V0 Y# K5 [4 D8 ?( B
    "xdc.runtime.Main",9 W+ U1 L3 k. t& l' q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& q9 {: B+ e! h) q# J% x    Diags.RUNTIME_ON4 p+ p# a% _1 r2 _1 `9 e
);3 }: M  c! j) {# t3 p0 q6 l! Q
( C/ [$ N9 @# k# g  j* A
var Registry = xdc.useModule('xdc.runtime.Registry');9 w5 ^' i9 ~- c" U" ?; k
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& }9 W# @: {/ V1 r  }# f" x% v' qRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 z& l; d( D  Y  i- L& w0 H" a2 YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" _! x, c8 g3 H: Y0 P  c  lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! b5 Q. m9 }3 L  @% M

( ?0 o1 w' O" \, n$ m2 }/* create a logger instance */
. w& W! D' T" B, F5 A1 Uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; h# L6 S1 F3 V8 s, D) Y% Z
var loggerBufP = new LoggerBuf.Params();* h3 x$ L* b  }# k4 x' M
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 N8 ]6 A) @9 E& `7 k
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
: _$ L- d# e* X- x& N( K& j9 D  h" j4 I- T  c1 @- [
var appLogger = LoggerBuf.create(loggerBufP);
3 U# Z% `5 Y1 t# E1 pappLogger.instance.name = "AppLog_Core1";
' R; t3 H" W6 I3 l; Q* e$ {Defaults.common$.logger = appLogger;* h$ j* F; g$ U% \' z3 w
Memory.defaultHeapSize = 0x8192;    6 C* V) S: q. h9 E+ g
Idle.idleFxns[0] = "&LEDStatus";8 w4 ]$ t) j+ _; _4 F0 p
Cache.initSize.l2Size = Cache.L2Size_32K;$ g+ ]( A# T  A3 ^3 R

1 j8 n4 t8 O0 Q" Q6 Q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-3 21:05 , Processed in 0.041903 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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